gpt4 book ai didi

android - 动态 ListView Android

转载 作者:行者123 更新时间:2023-11-30 03:10:36 24 4
gpt4 key购买 nike

我正在尝试根据书名、作者或 ISBN 的搜索查询创建图书的动态 ListView 。

我可以显示一个项目,但出于某种原因,我看不到与搜索查询匹配的任何其他项目。

主要方法

    // Set up search array
int i = 0;
String searchEntries[] = InventoryAdapter.getTitleAndAuthorByISBN(isbn);
searchArray.add(new InventoryItem(searchQuery, searchEntries));


// add data in custom adapter
adapter = new CustomAdapter(this, R.layout.list, searchArray);
ListView dataList = (ListView) findViewById(R.id.list);
dataList.setAdapter(adapter);

自定义适配器

public class CustomAdapter extends ArrayAdapter<InventoryItem> {
Context context;
int layoutResourceId;
LinearLayout linearMain;
ArrayList<InventoryItem> data = new ArrayList<InventoryItem>();

public CustomAdapter(Context context, int layoutResourceId,
ArrayList<InventoryItem> data) {
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;

if (row == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);

linearMain = (LinearLayout) row.findViewById(R.id.lineraMain);

InventoryItem myItem = data.get(position);
for (int j = 0; j < myItem.getDetails().length; j++) {
TextView label = new TextView(context);
label.setText(myItem.details[j]);
linearMain.addView(label);
}
}

return row;

}

}

库存元素

public class InventoryItem {

public String query;
public String details[];

public InventoryItem(String query, String[] details) {
super();
this.query = query;
this.details = details;
}
public String getQuery() {
return query;
}
public void setQuery(String query) {
this.query = query;
}
public String[] getDetails() {
return details;
}
public void setDetails(String[] details) {
this.details = details;
}

}

list.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/lineraMain"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:padding="10dp" >

</LinearLayout>

主要方法xml

<LinearLayout
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="95"
android:orientation="vertical">


<ScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:overScrollMode="always"
android:isScrollContainer="true"
android:scrollbarAlwaysDrawVerticalTrack="true"
android:scrollbarStyle="outsideInset"
android:scrollbars="vertical">

<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >

<ListView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
</ListView>

</LinearLayout>

</ScrollView>

</LinearLayout>

知道我做错了什么吗?

最佳答案

您在 ScrollView 中有一个 ListView。不推荐糟糕的设计。

http://developer.android.com/reference/android/widget/ScrollView.html

引用文档

You should never use a ScrollView with a ListView, because ListView takes care of its own vertical scrolling. Most importantly, doing this defeats all of the important optimizations in ListView for dealing with large lists, since it effectively forces the ListView to display its entire list of items to fill up the infinite container supplied by ScrollView.

同时将getView改为

 @Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;

if (row == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
linearMain = (LinearLayout) row.findViewById(R.id.lineraMain);
}

InventoryItem myItem = data.get(position);
TextView label = new TextView(context);
label.setText(myItem.details[positon]);
linearMain.addView(label);

return row;

}

编辑:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/lineraMain"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:padding="10dp" >
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>

</LinearLayout>

然后在getView

@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;

if ( convertView== null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
convertView = inflater.inflate(layoutResourceId, parent, false);
holder = ViewHolder();
holder.tv = (TextView) convertView.findViewById(R.id.tv);
convertView.setTag(holder);
}
else
{
holder = (ViewHolder) convertView.getTag();
}

InventoryItem myItem = data.get(position);
holder.tv.setText(myItem.details[positon]);


return convertView;

}

static class ViewHolder
{
TextView tv;
}

关于android - 动态 ListView Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21050440/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com