2

我的 Activity 中有一个 ListView,它在onCreateby中设置

    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我想重新加载我的列表之后,因为此方法更改了数据库中的某些内容,但列表没有更新。requery()导致列表为空。我怎样才能“上一层楼”与另一层一起工作,adapter那我该怎么办?

非常感谢!

4

4 回答 4

6

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

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

这会通过我的 Database-Class 获得一个新游标,并用新游标替换它自己的旧游标。

发现没有其他方法可以从 CursorAdapter 内部更改光标。

于 2011-08-31T10:45:45.560 回答
4

打电话

adapter.notifyDataSetChanged();

文档:这里

于 2011-04-17T19:36:46.540 回答
1

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

但是方法 requery() 已被弃用。所以我们可以使用LoaderManager和Loader。

于 2013-10-30T06:24:32.043 回答
0

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

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

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

于 2014-08-29T04:47:09.433 回答