【问题标题】:Calling notifyDataSetChanged on a ListAdapter在 ListAdapter 上调用 notifyDataSetChanged
【发布时间】:2012-11-17 14:56:52
【问题描述】:

我有一个ListAdapter如下图:

setListAdapter(new ArrayAdapter<String>(DeleteMenu.this,             
                                  android.R.layout.simple_list_item_1, 
                                  classes));

我正在尝试在 onListItemClick() 函数中调用 notifyDataSetChanged()。我尝试了几种不同的方法,并在 StackOverFlow 上查看了类似的问题,但我仍然无法弄清楚。

有人可以帮忙吗?

编辑:我应该更清楚,我没有收到错误,我只是不知道该调用函数notifyDataSetChanged() 方法。我是否必须将我的ListAdapter 分配给一个变量并像var.notifyDataSetChanged() 一样调用它?

【问题讨论】:

  • 问题不清楚。实际问题是什么?你想做什么?
  • 错误是什么?发布有问题的代码。同时发布您的 logcat 输出。

标签: android listadapter


【解决方案1】:

您应该在适配器上调用notifyDataSetChanged

Adapter adapter = new Adapter();
ListView list = (ListView) findViewById(R.id.listview);
list.setAdapter(adapter);
adapter.notifyDataSetChanged();

【讨论】:

  • 谢谢,您能详细说明一下吗?
  • 您在适配器上调用 notifydatasetchanged。你不能在你的例子中这样做,因为你没有给它一个名字以便以后引用它。这有意义吗?
  • 无需将适配器分配给局部变量。您可以通过调用 getListAdapter() 在 ListActivity/ListFragment 中的任何位置检索适配器。
【解决方案2】:
((BaseAdapter) listView.getAdapter()).notifyDataSetChanged(); 

在这个答案中查看更多信息: https://stackoverflow.com/a/4198569/3994630

【讨论】:

    【解决方案3】:

    您可以通过获取对适配器的引用来调用方法 notifyAdapterChanged()。您可以保留本地参考(如 user1411084 的答案),也可以通过调用来检索它:

    getListAdapter()
    

    需要注意的重要一点是接口 ListAdapter 不提供方法notifyDataSetChanged(),因此您应该将其转换为您之前分配的适配器的类型。

    结果将如下所示(可以在您的 ListActivity/ListFragment 中的任何位置调用:

    ((ArrayAdapter) getListAdapter()).notifyDataSetChanged();
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    • 2021-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多