在Android中删除ListView项目

kav*_*tha 58 android 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);
}
Run Code Online (Sandbox Code Playgroud)

这里的repopulateList()方法将添加到ListView项,但它不会删除/替换所有ListView项.

esh*_*arp 74

您将需要remove()来自适配器对象的项目,然后只需notifyDatasetChanged()在适配器上运行,任何人ListView都应该(应该)回收并自行更新.

这是s的简短活动示例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();
        }
    });
Run Code Online (Sandbox Code Playgroud)

  • 什么是你的MyDataObject? (34认同)
  • MyDataObject将是您的终极后备存储.大多数情况下,您不仅要删除显示的项目,还要从某些数据库,某些服务器或某些文件存储中删除它们.Esharp只是留下一个提示,除了将其从显示中删除之外,你需要记住要真正删除数据. (8认同)

Lab*_*lan 24

我想如果你添加以下代码,它将工作

listview.invalidateViews();
Run Code Online (Sandbox Code Playgroud)

要删除项目,只需从我们传递给适配器的arraylist中删除该项目,然后执行listview.invalidateViews();
此操作将刷新列表视图


Jan*_*usz 19

您可以使用

adapter.clear() 
Run Code Online (Sandbox Code Playgroud)

这将删除您的第一个适配器的所有项目,然后您可以设置另一个适配器或重用适配器并将项目添加到旧适配器.如果你使用

adapter.add()
Run Code Online (Sandbox Code Playgroud)

要将数据添加到列表,您不需要调用notifyDataSetChanged

  • 我的CustomAdapter没有clear()从BaseAdapter扩展! (6认同)

小智 15

int count = adapter.getCount();
for (int i = 0; i < count; i++) {
 adapter.remove(adapter.getItem(i));
}
Run Code Online (Sandbox Code Playgroud)

然后打电话 notifyDataSetChanged();

  • 应该是`adapter.remove(adapter.getItem(0));`? (7认同)
  • 伊什塔尔的评论是正确的.上面的代码将尝试删除列表末尾的项目.通过列表的每次迭代都会删除一个项目,因此当i等于(count - 1)时,您将拥有一个项目列表,并且getItem(i)将失败. (4认同)
  • IndexOutOfRange接近. (3认同)

Atm*_*tma 9

从适配器中删除它,然后通知arrayadapter数据集已更改.

m_adapter.remove(o);
m_adapter.notifyDataSetChanged();
Run Code Online (Sandbox Code Playgroud)