如何从一个button点击ListViewdynamic删除项目?

我正在处理一个应用程序,需要从button事件的ListView删除项目。

我试图从ArrayList删除它,并创build整个新的适配器,再次加载列表,但由于我的列表是巨大的,它会影响我的应用程序的性能,所以我想知道是否有任何其他方式,我可以从我的列表中删除项目dynamic?

我尝试了你所说的人。

起初,我只是试图删除一个项目,它是完美的工作,但随着我增加选定项目的数量开始给我IndexOutOfBoundException。

这是我的代码:

 public void onClick(View view) { SparseBooleanArray checkedPositions = new SparseBooleanArray(); checkedPositions.clear(); checkedPositions = lv.getCheckedItemPositions(); int size = checkedPositions.size(); if(size != 0) { for(int i = 0; i <= size; i++) { if(checkedPositions.valueAt(i)) { list.remove(notes.getItem(checkedPositions.keyAt(i))); notes.notifyDataSetChanged(); } } } else{} } 

这里的注释是对SimpleAdapter对象的引用。

Solutions Collecting From Web of "如何从一个button点击ListViewdynamic删除项目?"

那么你只需使用ArrayAdapterremove()方法从列表中删除所需的项目。

一个可能的方法是:

 Object toRemove = arrayAdapter.getItem([POSITION]); arrayAdapter.remove(toRemove); 

另一种方法是修改ArrayList并调用ArrayAdapter上的notifyDataSetChanged()

 arrayList.remove([INDEX]); arrayAdapter.notifyDataSetChanged(); 

这对我有效。 希望它可以帮助别人。 🙂

 SimpleAdapter adapter = (SimpleAdapter) getListAdapter(); this.resultsList.remove((int) info.id); adapter.notifyDataSetChanged(); 
 adapter.remove(arraylist.get(position)); adapter.notifyDataSetChanged(); 

或者你可以再打电话

 setListAdapter(adapter) 

在列表上有一个button,让它在XML中onclickfunction喜欢首先获得位置

 public void OnClickButton(View V){ final int postion = listView.getPositionForView(V); System.out.println("postion selected is : "+postion); Delete(postion); } public void Delete(int position){ if (adapter.getCount() > 0) { //Log.d("largest no is",""+largestitemno); //deleting the latest added by subtracting one 1 comment = (GenrricStoring) adapter.getItem(position); //Log.d("Deleting item is: ",""+comment); dbconnection.deleteComment(comment); List<GenrricStoring> values = dbconnection.getAllComments(); //updating the content on the screen this.adapter = new UserItemAdapter(this, android.R.layout.simple_list_item_1, values); listView.setAdapter(adapter); } else { int duration = Toast.LENGTH_SHORT; //for showing nothing is left in the list Toast toast = Toast.makeText(getApplicationContext(),"Db is empty", duration); toast.setGravity(Gravity.CENTER, 0, 0); toast.show(); } } 
  List<String> entries; private ArrayAdapter<String> categoryAdapter; //Your list of entries {Example: <"category1","category2","category3">} entries = new ArrayList<String>(); categoryAdapter = new ArrayAdapter<String>(ViewBeaconsActivity.this, android.R.layout.simple_list_item_1, entries); //Remove that specific category from the list entries.remove(categoryName); //Notify the adapter that your dataset has changed. categoryAdapter.notifyDataSetChanged(); 

您可以像这样从列表视图中删除项目,或者您可以在Button事件上select哪个项目必须删除

 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(); } } 

至于你的最后一个问题,下面用一个简单的例子来说明问题:

假设您的列表包含5个元素: list = [1, 2, 3, 4, 5] ,您要删除的项目列表(即索引)是indices_to_remove = [0, 2, 4] 。 在循环的第一次迭代中,您将删除索引为0的项目,以便您的列表变成list = [2, 3, 4, 5] 。 在第二次迭代中,您删除索引2处的项目,以便您的列表变成list = [2, 3, 5] (正如您所看到的,这将删除错误的元素)。 最后,在第三次迭代中,您尝试删除索引为4的元素,但该列表只包含三个元素,所以会出现超出范围的exception。

现在你看到了什么问题,希望你能想出一个解决scheme。 祝你好运!

  private List<DataValue> datavalue=new ArrayList<Datavalue>; @Override public View getView(int position, View view, ViewGroup viewGroup) { view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { datavalue.remove(position); notifyDataSetChanged(); } }); } } 
 <ImageView android:id="@+id/btnDelete" android:layout_width="35dp" android:layout_height="match_parent" android:layout_alignBottom="@+id/editTipo" android:layout_alignParentRight="true" android:background="@drawable/abc_ic_clear" android:onClick="item_delete_handler"/> 

并创build事件item_delete_handler