Android应用程序中的dynamicListView

有没有一个工作的例子,演示如何在ListView中dynamic追加额外的行? 例如:

  1. 你正在从不同的领域提取RSS提要
  2. 然后显示ListView中的前10个项目(当您在后台运行的其他线程继续拉动提要时)
  3. 您滚动并到达列表底部,然后单击button查看更多项目
  4. ListView将会附加额外的10个项目,现在总共有20个项目。

任何build议如何做到这一点?

尼古拉斯

要dynamic添加新项目到你的列表中,你必须从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; } } 

}

你可以扩展上面的例子,并添加“更多”button – 只是添加新的项目到您的适配器(或向量)。
问候!