在Android中删除ListView项目
有人可以请给我一个例子代码删除所有的ListView项目和更换新项目?
我尝试更换适配器项目没有成功。 我的代码是
populateList(){ results //populated arraylist with strings ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, results); listview.setAdapter(adapter); adapter.notifyDataSetChanged(); listview.setOnItemClickListener(this); } // now populating list again repopulateList(){ results1 //populated arraylist with strings ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, results1); listview.setAdapter(adapter1); adapter1.notifyDataSetChanged(); listview.setOnItemClickListener(this); }
这里repopulateList()
方法将添加到ListView项目,但它不会删除/replace所有ListView项目。
您将要从适配器对象中remove()
该项目,然后在适配器上运行notifyDatasetChanged()
,任何ListView
将(应该)自行回收和更新。
以下是AlertDialog
的一个简短的活动示例:
adapter = new MyListAdapter(this); lv = (ListView) findViewById(android.R.id.list); lv.setAdapter(adapter); lv.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> a, View v, int position, long id) { AlertDialog.Builder adb=new AlertDialog.Builder(MyActivity.this); adb.setTitle("Delete?"); adb.setMessage("Are you sure you want to delete " + position); final int positionToRemove = position; adb.setNegativeButton("Cancel", null); adb.setPositiveButton("Ok", new AlertDialog.OnClickListener() { public void onClick(DialogInterface dialog, int which) { MyDataObject.remove(positionToRemove); adapter.notifyDataSetChanged(); }}); adb.show(); } });
您可以使用
adapter.clear()
这将删除您的第一个适配器的所有项目,然后您可以设置另一个适配器或重新使用该适配器并将项目添加到旧的适配器。 如果你使用
adapter.add()
要将数据添加到列表中,您不需要调用notifyDataSetChanged
我想如果你添加下面的代码,它会工作
listview.invalidateViews();
要移除一个项目,只需从我们传递给适配器的listview.invalidateViews();
移除该项目,然后执行listview.invalidateViews();
这将刷新列表视图
int count = adapter.getCount(); for (int i = 0; i < count; i++) { adapter.remove(adapter.getItem(i)); }
然后调用notifyDataSetChanged();
将其从适配器中删除,然后通知arrays适配器数据集已更改。
m_adapter.remove(o); m_adapter.notifyDataSetChanged();
names = db.getSites(); la = new ArrayAdapter<String>(EditSiteList.this, android.R.layout.simple_list_item_1, names); EditSiteList.this.setListAdapter(la); listview.invalidateViews();
这段代码适合我。
- 您应该只使用绑定在您需要列出的数据列表的一个适配器
- 当需要删除和replace所有项目时,必须使用“list.clear()”清除数据列表中的所有项目,然后使用“list.addAll(List)”添加新数据
这里是一个例子:
List<String> myList = new ArrayList<String>(); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, myList); listview.setAdapter(adapter); listview.setOnItemClickListener(this); populateList(){ List<String> result = getDataMethods(); myList.addAll(result); adapter.notifyDataSetChanged(); } repopulateList(){ List<String> result = getDataMethods(); myList.clear(); myList.addAll(result); adapter.notifyDataSetChanged(); }
试试这个代码,它适用于我。
public class Third extends ListActivity { private ArrayAdapter<String> adapter; private List<String> liste; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_third); String[] values = new String[] { "Android", "iPhone", "WindowsMobile", "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X", "Linux", "OS/2" }; liste = new ArrayList<String>(); Collections.addAll(liste, values); adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, liste); setListAdapter(adapter); } @Override protected void onListItemClick(ListView l, View v, int position, long id) { liste.remove(position); adapter.notifyDataSetChanged(); } }
首先,你应该从列表中删除该项目。 稍后,您可以清空您的适配器,并用新的列表重新填充它。
private void add(final List<Track> trackList) { MyAdapter bindingData = new MyAdapter(MyActivity.this, trackList); list = (ListView) findViewById(R.id.my_list); // TODO list.setAdapter(bindingData); // Click event for single list row list.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, final int position, long id) { // ShowPlacePref(places, position); AlertDialog.Builder showPlace = new AlertDialog.Builder( Favoriler.this); showPlace.setMessage("Remove from list?"); showPlace.setPositiveButton("DELETE", new OnClickListener() { public void onClick(DialogInterface dialog, int which) { trackList.remove(position); //FIRST OF ALL REMOVE ITEM FROM LIST list.setAdapter(null); // THEN EMPTY YOUR ADAPTER add(trackList); // AT LAST REFILL YOUR LISTVIEW (Recursively) } }); showPlace.setNegativeButton("CANCEL", new OnClickListener() { public void onClick(DialogInterface dialog, int which) { } }); showPlace.show(); } }); }
这很简单。首先,你应该清除你的collections,并清除列表后,像这样的代码:
yourCollection.clear(); setListAdapter(null);
您可以使用
lv.setAdapter(null);