我有一个附带自定义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
答案 0 :(得分:0)
BaseAdapter方法notifyDataSetChanged()应该做你想要的。可能是您传入的适配器与ListView使用的适配器不同。请尝试使用getAdapter()代替:
((MyCursorAdapter) myListView.getAdapter()).notifyDataSetChanged();