Android应用程序中的dynamicListView
有没有一个工作的例子,演示如何在ListView中dynamic追加额外的行? 例如:
- 你正在从不同的领域提取RSS提要
- 然后显示ListView中的前10个项目(当您在后台运行的其他线程继续拉动提要时)
- 您滚动并到达列表底部,然后单击button查看更多项目
- 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 – 只是添加新的项目到您的适配器(或向量)。
问候!
- 我如何读取build.gradle中的local.properties中定义的属性
- 适用于Android的Visual Studio模拟器 – 安装Gapps(Google Play Services)
- Androidpopup窗口解雇
- 如何在没有checkbox的情况下在listview中显示已安装的应用程序列表在列表视图滚动时未被选中?
- Android – 设置一个AsyncTask的超时?
- Android Studio在可绘制属性中显示红色感叹号
- Looper的目的是什么?如何使用它?
- Android Webview应用程序不会让video播放器全屏显示
- 在Android上为蓝牙低功耗创build后台服务