我的Activity中有一个ListView,它在onCreate
中由
MyCursorAdapter adapter = new TaskConditsCursorAdapter(this, conditsCursor, taskID, isNewTask);
setListAdapter(adapter);
然后我在MyCursorAdapter
做了一些工作。除此之外,我还有一个行特定的AlertDialog:
...
builder.setPositiveButton("OK"), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
changeTaskConditBoolValue(taskId, conditId, chosenBoolValue2);
// refresh?
}
});
changeTaskConditBoolValue
之后我想重新加载我的List,因为这个方法改变了数据库中的内容,但List没有更新。 requery()
导致列表为空。
我怎样才能“再高一级”再次使用adapter
,那我该怎么做呢?
非常感谢!
答案 0 :(得分:6)
在MyCursorAdapter
调用的方法的onClick
中 - 在我的情况下,changeTaskConditBoolValue(...)
我必须致电:
this.changeCursor(db.fetchAllTasks(myParameters));
这将由我的Database-Class获取一个新游标,并用新的游标替换它自己的旧游标。
找不到其他方法从CursorAdapter内部更改光标。
答案 1 :(得分:4)
答案 2 :(得分:1)
调用适配器的requery()是唯一的解决方案。
但是不推荐使用方法requery()。所以我们可以使用LoaderManager和Loader。
答案 3 :(得分:0)
这对我有用,我不确定它是最好的方法。
c = db.rawQuery( "SELECT * FROM mytable", null); //same line of the initial initialization
adapter.swapCursor(c);
我刷新了唯一的光标,我不知道如何处理新光标。