1

我有一个列表视图,其中填充了几个 ListItem。我还有一个选项菜单,其中包括“删除所有项目”按钮。当我点击这个按钮时,它会调用一个方法来删除除默认值之外的所有项目,并且还应该刷新 ListView。这是菜单代码:

public boolean onOptionsItemSelected(MenuItem item) {
    switch(item.getItemId())
    {
        ...
        case R.id.optMenuDeleteAllCategories:
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setMessage("Are you sure you want to delete all categories?")
            .setCancelable(false)
            .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    **deleteAllCategories();**
                }

这是deleteAllCategories()方法:

 public void deleteAllCategories()
{
    manager.deleteAllCategories();
    adapter.notifyDataSetChanged();
}

所以它确实会删除所有内容,但 ListView 不会刷新。我必须退出应用程序并重新打开它才能看到更改。我也尝试adapter.notifyDataSetChanged();在调用deleteAllCategories方法后立即放置该行,但 ListView 仍然没有刷新。

那么如何在不退出应用程序的情况下刷新它呢?

4

1 回答 1

2

在 deleteAllCategories 方法中调用 adapter.clear() 也可以从列表中删除项目。

编辑: ArrayAdapter 内部将在不同的列表实例上工作,然后是您传入的那个。因此,虽然将反映对原始列表中对象的更改,但您传入的 ArrayList 的更改对适配器不可见。

需要使用 ArrayAdapter 的 add、insert、remove 和 clear 方法来修改适配器中的列表。

于 2012-10-24T13:58:47.390 回答