【问题标题】:1st Activity's listview not updated after 2nd activity inserts into database via ContentProvider; onLoadFinished not called在第二个活动通过 ContentProvider 插入数据库后,第一个活动的列表视图未更新; onLoadFinished 未调用
【发布时间】:2013-05-21 03:15:16
【问题描述】:

问题:从第二个活动返回后,第一个活动的列表视图不反映第二个活动所做的数据库更改。如果我对代码进行微小的更改(以使模拟器满意)并重新启动应用程序,则列表视图现在可以准确地显示数据库更改上次会话期间所做的第二个活动。

应用的核心:

MainActivity: extends Activity implements LoaderManager.LoaderCallbacks<Cursor>
=>onCreate: SimpleCursorAdapter set; getLoaderManager().initLoader(LOADER_ID, null, this)
=>onResume: super.onResume(); getLoaderManager().restartLoader(0, null, this)

...天哪!问题是:initLoader 和 restartLoader 使用不同的加载器 ID。

在过去的五个小时里,这让我感到难过。为什么我要离开这个问题:在尝试解决我的问题时,我没有遇到这个答案(也许它太愚蠢了,无法建议某人寻找)但是对于下一个以这种独特方式绊倒的人,这是一个潜在的答案。

【问题讨论】:

  • studmann 你有没有设法解决这个问题。尽管我正确调用了 setNotificationUri() 和 notofyChanges(),但我的列表视图也没有刷新。

标签: android android-contentprovider android-cursoradapter android-loadermanager


【解决方案1】:

确保在 initLoader 和 restartLoader 中的 LoaderManager ID 相同。

除了 Alex 和 CommonsWare 的所有其他帖子以及您在寻找更新失败列表视图的解决方案时会遇到的所有其他帖子之外,这可能是您遇到的其他事情。

在寻找可能出错的地方时,我还注意到我没有实现: cursor.setNotificationUri(getContext().getContentResolver(), uri);

(How do CursorLoader automatically updates the view even if the app is inactive?)

...我关注的关于如何实现内容提供者的两个不同教程在其提供者的查询方法中没有那个 setContentNotificationUri;尽管他们使用了 querybuilder 而我没有(也许 setContentNotificationUri 包含在 queryBuilder 中?快速研究并没有表明是这种情况)。

【讨论】:

    猜你喜欢
    • 2023-04-02
    • 2019-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-21
    • 1970-01-01
    • 1970-01-01
    • 2015-03-27
    相关资源
    最近更新 更多