当游标中的数据未更改时刷新ListView的最佳方法

时间:2014-11-11 14:50:26

标签: android listview android-listview

我有一个附带自定义CursorAdapter的ListView。在CursorAdapter bindView方法中,我运行一些依赖于用户选择的显示单位的计算(这些可以在设置中随时更改)

通常更新ListView我会运行:

myCursor = DB.getData();
myDataAdapter.changeCursor(myCursor);

在大多数情况下这很好用。但是如果用户在“设置”中更改了其显示单位,则上面的代码不会更新ListView。我认为这是因为游标中的数据实际上没有改变。

我尝试针对适配器运行notifyDataSetInvalidated()notifyDataSetChanged(),针对ListView运行invalidateViews(),但这些都没有任何区别。 我目前所做的是重新创建适配器:

myCursor = db.getData();
myCursorAdapter = new myCursorAdapter(getActivity(),myCursor,0);
myListView.setAdapter(myCursorAdapter);

这有效,但我不认为每次需要刷新ListView时重新创建适配器都是一个好习惯...有更好的方法吗?

编辑:

即使游标中的数据没有改变,

myDataAdapter.changeCursor(myCursor)实际上也在工作。自定义光标适配器代码中的错误导致listview不更新,除非重新创建适配器。

notifyDataSetChanged()仍然不起作用,但决定不再深入研究,只使用changeCursor

1 个答案:

答案 0 :(得分:0)

BaseAdapter方法notifyDataSetChanged()应该做你想要的。可能是您传入的适配器与ListView使用的适配器不同。请尝试使用getAdapter()代替:

((MyCursorAdapter) myListView.getAdapter()).notifyDataSetChanged();