Android 应用中的动态 ListView
Posted
技术标签:
【中文标题】Android 应用中的动态 ListView【英文标题】:Dynamic ListView in Android app 【发布时间】:2010-12-27 10:17:30 【问题描述】:是否有一个可行的示例来演示如何在 ListView 中动态附加额外的行? 例如:
-
您正在从
不同的域
然后显示前 10 个项目
在 ListView 中(当你有
中运行的其他线程
后台继续拉提要)
您滚动并到达底部
列表并单击一个按钮以
查看更多项目
ListView 随后将被附加
加上额外的 10 项,其中
现在总共生产 20 件商品。
任何建议如何做到这一点?
尼古拉斯
【问题讨论】:
【参考方案1】:要动态地将新项目添加到列表中,您必须从 ListActivity 获取适配器类并简单地添加新元素。当您将项目直接添加到适配器时,系统会自动为您调用 notifyDataSetChanged - 并且视图会自行更新。
您还可以提供自己的适配器(扩展 ArrayAdapter)并覆盖采用 List 参数的构造函数。您可以像使用适配器一样使用此列表,但在这种情况下,您必须自己调用 adapter.notifyDataSetChanged() - 以刷新视图。 请看下面的例子:
public class CustomList extends ListActivity
private LayoutInflater mInflater;
private Vector<RowData> data;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mInflater = (LayoutInflater) getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
data = new Vector<RowData>();
RowData rd = new RowData("item1", "description1");
data.add(rd);
rd = new RowData("item2", "description2");
data.add(rd);
rd = new RowData("item2", "description3");
data.add(rd);
CustomAdapter adapter = new CustomAdapter(this, R.layout.custom_row,R.id.item, data);
setListAdapter(adapter);
getListView().setTextFilterEnabled(true);
public void onListItemClick(ListView parent, View v, int position, long id)
CustomAdapter adapter = (CustomAdapter) parent.getAdapter();
RowData row = adapter.getItem(position);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(row.mItem);
builder.setMessage(row.mDescription + " -> " + position );
builder.setPositiveButton("ok", null);
builder.show();
/**
* Data type used for custom adapter. Single item of the adapter.
*/
private class RowData
protected String mItem;
protected String mDescription;
RowData(String item, String description)
mItem = item;
mDescription = description;
@Override
public String toString()
return mItem + " " + mDescription;
private class CustomAdapter extends ArrayAdapter<RowData>
public CustomAdapter(Context context, int resource,
int textViewResourceId, List<RowData> objects)
super(context, resource, textViewResourceId, objects);
@Override
public View getView(int position, View convertView, ViewGroup parent)
ViewHolder holder = null;
//widgets displayed by each item in your list
TextView item = null;
TextView description = null;
//data from your adapter
RowData rowData= getItem(position);
//we want to reuse already constructed row views...
if(null == convertView)
convertView = mInflater.inflate(R.layout.custom_row, null);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
//
holder = (ViewHolder) convertView.getTag();
item = holder.getItem();
item.setText(rowData.mItem);
description = holder.getDescription();
description.setText(rowData.mDescription);
return convertView;
/**
* Wrapper for row data.
*
*/
private class ViewHolder
private View mRow;
private TextView description = null;
private TextView item = null;
public ViewHolder(View row)
mRow = row;
public TextView getDescription()
if(null == description)
description = (TextView) mRow.findViewById(R.id.description);
return description;
public TextView getItem()
if(null == item)
item = (TextView) mRow.findViewById(R.id.item);
return item;
您可以扩展上面的示例并添加“更多”按钮 - 这只是将新项目添加到您的适配器(或向量)。问候!
【讨论】:
谢谢,斜坡。我试试看 你好朋友在上面的例子中我得到了异常它告诉 set expandablelist 适配器而不是在 setListAdapter(adapter) 的 onCreate 方法中的 ListAdapter以上是关于Android 应用中的动态 ListView的主要内容,如果未能解决你的问题,请参考以下文章