如何从 CursorAdapter 中刷新 ListView?

发布于 2024-11-01 22:21:32 字数 760 浏览 0 评论 0原文

我的 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 之后,我想重新加载我的列表,因为此方法更改了数据库中的某些内容,但列表没有更新。 requery() 结果列表为空。 我怎样才能“高出一层”来再次使用适配器,然后我应该做什么?

多谢!

I've got a ListView in my Activity, which is set in the onCreate by

    MyCursorAdapter adapter = new TaskConditsCursorAdapter(this, conditsCursor, taskID, isNewTask);
    setListAdapter(adapter);

Then I do some work in the MyCursorAdapter. Amongst others I have a rowspecific AlertDialog:

...
    builder.setPositiveButton("OK"), new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int item) {
            changeTaskConditBoolValue(taskId, conditId, chosenBoolValue2);
            // refresh?
        }
    });

After the changeTaskConditBoolValue I want to reload my List, since this method changed something in the database, but the List didn't update. requery() results in the list being empty.
How can I come "one level above" to work with the adapter again and what should I do to it then?

Thanks a lot!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

薄凉少年不暖心 2024-11-08 22:21:33

MyCursorAdapter 中由 onClick 调用的方法中 - 在我的例子中,它是 changeTaskConditBoolValue(...) 我必须调用

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

:我的数据库类创建了一个新游标,并用新游标替换了它自己的旧游标。

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

In the MyCursorAdapter in the method called by the onClick - in my case it is changeTaskConditBoolValue(...) I have to call:

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

This gets a new cursor by my Database-Class and replaces its own old one with the new one.

Found no other way to change the cursor from inside the CursorAdapter.

寻梦旅人 2024-11-08 22:21:33

只需调用

adapter.notifyDataSetChanged();

文档:此处

Just call

adapter.notifyDataSetChanged();

Documentation: Here

朕就是辣么酷 2024-11-08 22:21:33

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

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

calling requery() of adapter is the only solution.

But the method requery() is deprecated. So we can use LoaderManager and Loader.

记忆里有你的影子 2024-11-08 22:21:33

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

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

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

This is what works for me, im not sure its the best way.

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

I refresh the only cursor, I dont know what to do with a new one.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文