如何从CursorAdapter中刷新ListView?

时间:2011-04-17 19:30:20

标签: android listview android-cursoradapter

我的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,那我该怎么做呢?

非常感谢!

4 个答案:

答案 0 :(得分:6)

MyCursorAdapter调用的方法的onClick中 - 在我的情况下,changeTaskConditBoolValue(...)我必须致电:

this.changeCursor(db.fetchAllTasks(myParameters));

这将由我的Database-Class获取一个新游标,并用新的游标替换它自己的旧游标。

找不到其他方法从CursorAdapter内部更改光标。

答案 1 :(得分:4)

致电

adapter.notifyDataSetChanged();

文档:Here

答案 2 :(得分:1)

调用适配器的requery()是唯一的解决方案。

但是不推荐使用方法requery()。所以我们可以使用LoaderManager和Loader。

答案 3 :(得分:0)

这对我有用,我不确定它是最好的方法。

c = db.rawQuery( "SELECT * FROM mytable", null); //same line of the initial initialization
adapter.swapCursor(c);

我刷新了唯一的光标,我不知道如何处理新光标。