Android 如何从游标适配器中刷新ListView?

Android 如何从游标适配器中刷新ListView?,android,listview,android-cursoradapter,Android,Listview,Android Cursoradapter,我的活动中有一个ListView,它是由 MyCursorAdapter adapter = new TaskConditsCursorAdapter(this, conditsCursor, taskID, isNewTask); setListAdapter(adapter); 然后我在MyCursorAdapter中做一些工作。除此之外,我还有一个特定于行的AlertDialog: ... builder.setPositiveButton("OK"), new

我的活动中有一个ListView,它是由

    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
之后,我想重新加载我的列表,因为此方法更改了数据库中的某些内容,但列表没有更新<代码>重新查询()导致列表为空。 我如何才能“比”高一级来再次使用
适配器
,然后我应该如何处理它

非常感谢

只要打电话就行了

adapter.notifyDataSetChanged();

文档:

MyCursorAdapter
中,在
onClick
调用的方法中-在我的情况下,它是
changeTaskConditionBoolValue(…)
我必须调用:

this.changeCursor(db.fetchAllTasks(myParameters));
这将通过我的数据库类获取一个新游标,并用新游标替换它自己的旧游标

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

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


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

这对我来说是有效的,我不确定这是最好的方法

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

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

快告诉我吧。。。我想如果您在自己的适配器类代码中,您只需要使用notifyDataSetChanged()或this.notifyDataSetChanged()。Thnak就可以了,但不幸的是,这些都不能正常工作。他们只是没有效果。。。有什么我应该注意的吗?我必须在ListView中显示正确的数据据我所知,我应该使用requery(),因为我更改了数据库中的某些内容,并且光标保存了过时的数据。但每次我重新查询时,列表都是完全空的-甚至图像视图都没有显示…与您有相同的问题,您是否找到了解决方案?notifyDataSetChanged对我也不起作用。如果您使用的是游标,似乎不再需要调用此函数。非常感谢。这是唯一有用的东西。您是否调用此.changeCursor(db.fetchAllTasks(myParameters));在UI线程上?我很难在单独的线程上执行此操作。因为我无法让我的加载器重新加载数据。如果我得到带有新数据的游标,我可以,但是我必须在主线程上调用它。