我正在开发一款需要在按钮事件中从ListView
删除项目的应用。
我尝试将其从ArrayList
中删除并创建全新的适配器并再次加载列表。由于我的列表很大,这样做会影响我的应用程序的性能。所以我想知道是否有其他方法可以动态地从列表中删除项目。
编辑:我试过你说的话。
当我删除一个项目时,它工作得很好,但随着我增加所选项目的数量,它开始给我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{}
}
此处,notes
是对SimpleAdapter对象的引用。
答案 0 :(得分:49)
您只需使用remove()
的{{1}}方法从列表中删除所需的项目。
可能的方法是:
ArrayAdapter
另一种方法是修改Object toRemove = arrayAdapter.getItem([POSITION]);
arrayAdapter.remove(toRemove);
并在ArrayList
上调用notifyDataSetChanged()
。
ArrayAdapter
答案 1 :(得分:5)
这对我有用。希望它可以帮助某人。 :)
SimpleAdapter adapter = (SimpleAdapter) getListAdapter();
this.resultsList.remove((int) info.id);
adapter.notifyDataSetChanged();
答案 2 :(得分:4)
adapter.remove(arraylist.get(position));
adapter.notifyDataSetChanged();
或者你可以再打电话
setListAdapter(adapter)
答案 3 :(得分:2)
在列表上有一个按钮,让它在xml中点击功能就像先获取位置一样
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();
}
}
答案 4 :(得分:1)
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();
}
});
}
}
答案 5 :(得分:0)
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();
答案 6 :(得分:0)
您可以从列表视图中删除项目,如下所示: 或者您可以选择Button事件中哪个项目必须删除
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();
}
}
答案 7 :(得分:0)
关于你的上一个问题,这里用一个简单的例子说明问题:
我们说您的列表包含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处的元素,但该列表仅包含三个元素,因此您将获得超出范围的异常。
现在您已经看到了问题所在,希望您能够找到解决方案。祝你好运!
答案 8 :(得分:-1)
<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"/>
并创建Event item_delete_handler ,