当前位置:  开发笔记 > 数据库 > 正文

数据库更改时,Android SimpleCursorAdapter不会更新

如何解决《数据库更改时,AndroidSimpleCursorAdapter不会更新》经验,为你挑选了3个好方法。

我有一个Android ListActivity是由数据库支持Cursor通过SimpleCursorAdapter.

单击项目时,将切换数据库中相应行中的标志字段,并且需要更新列表中的视图.

问题是,当更新的视图离开屏幕并被回收时,旧视图返回到视图时会显示在视图上.每当thr list重绘时(方向更改等),都会发生同样的事情.

notifydatasetchanged()用来刷新光标适配器,但似乎无效.

我应该如何更新数据库以便更新游标?



1> CommonsWare..:

打电话requery()Cursor,当你更改了要反映在数据库中的数据Cursor(或事物的Cursor填充,如ListView通过CursorAdapter).

A Cursor类似于ODBC客户端游标 - 它包含查询结果表示的所有数据.因此,仅仅因为您更改了数据库中的数据,Cursor除非您通过它刷新,否则不会知道这些更改requery().


更新:由于年龄的原因,应该删除整个问题和一组答案,但这显然是不可能的.任何寻求Android答案的人都应该记住,Android是一个快速移动的目标,而2009年的答案通常比新答案更糟糕.

目前的解决方案是,以获得新鲜的Cursor,并使用任一changeCursor()swapCursor()CursorAdapter以影响数据的变化.


`requery()`已被弃用.你应该发出一个新的'Cursor`并通过`adapter.changeCursor(myCursor)`将它发送到你的'CursorAdapter`.[请参阅文档](http://developer.android.com/reference/android/database/Cursor.html#requery%28%29)弃用通知.
没有"notifydatachanged".如果你的意思是适配器上的notifyDataSetChanged(),那就是SimpleCursorAdapter告诉ListView数据被更改的方式.引用文档,"通知附加的View已经更改了基础数据并且应该刷新自己." 但是,问题不在于适配器告诉ListView有关更改 - 您的问题是适配器不知道数据已更改.调用requery()是使用CursorAdapter解决这个问题的方法.

2> rony l..:

requery现已弃用.从文件:

不推荐使用此方法.不要使用它.只需请求一个新光标,这样你就可以异步执行此操作,并在新光标返回后更新列表视图.

获得新游标后,可以使用adapter.changeCursor(cursor).这应该更新视图.



3> siefca..:

如果使用加载器和自动生成的游标,您可以调用:

getLoaderManager().restartLoader(0, null, this);

在您的活动中,在更改DB上的内容之后,重新生成新游标.不要忘记定义事件处理程序:

@Override
public Loader onCreateLoader(int id, Bundle args) {
    CursorLoader cursorLoader =
            new CursorLoader(this,
                    YOUR_URI,
                    YOUR_PROJECTION, null, null, null);
    return cursorLoader;
}

@Override
public void onLoadFinished(Loader loader, Cursor data) {
    adapter.swapCursor(data);
}

@Override
public void onLoaderReset(Loader loader) {
    adapter.swapCursor(null);
}


这是一个很好的解决方案.谢谢你的回答.
尝试了Stack Overflow周围的六个不同的东西,这是最终为我工作的那个.谢谢!
推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有