【问题标题】:Custom SQLite Loader - listen to update from another Fragment/Activity自定义 SQLite 加载器 - 监听来自另一个片段/活动的更新
【发布时间】:2014-06-13 15:34:32
【问题描述】:

在我的应用程序中,我有一个 SQLite 数据库。 我有一个需要来自数据库的数据的 ListView,所以我想试试 Loaders。

我有 2 个片段:

片段 A - 有一个带有适配器的 ListView,该适配器使用自定义加载器从数据库获取数据。

片段 B - 这是一个“编辑项目”片段,其中项目被编辑然后在数据库中更新。

由于 Fragment B 不能(据我了解也不应该)访问 Fragment A 中的 Loader,因此在 Fragment B 中编辑项目不会更新 Fragment A。

我应该如何解决这个问题?使用 Loaders 可以解决这个问题吗?

【问题讨论】:

  • 您只需要一个编写良好的自定义 ContentProvider,请参阅记事本教程
  • 您的意思是使用 ContentObserver?我想实现一个 ContentObserver,但这对于我需要的东西来说有点过头了。
  • no,ContentProvider,看看如何使用 ContentResolver 注册 Uri 并通知更改,请参阅记事本提供程序

标签: android sqlite android-fragments android-loadermanager


【解决方案1】:

如果两个 Fragment 在同一个 Activity 中,它们可以访问同一个 loader。我认为您的问题是您正在像这样在片段中初始化加载程序:

getLoaderManager().initLoader(...);

什么时候你应该这样做:

getActivity().getLoaderManager().initLoader(...);

在您的第二个片段中使用同一行代码访问同一加载器,并显示要编辑的数据。编辑并更新数据库后,您需要调用 forceLoad()(因为您没有在自定义加载器中实现观察者),以将新数据加载到加载器中:

getActivity().getLoaderManager().getLoader(loaderId).forceLoad();

当你回到第一个片段时,会创建视图层次结构并调用initLoader()(通常在onCreateView()onActivityCreated()中实现),这将直接调用onLoadFinished(),因为加载器已经存在并且已被第二个片段更新。

【讨论】:

  • 这似乎运作良好(从活动中获取加载程序)。我似乎不需要 forceLoad 强硬
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-03
  • 1970-01-01
  • 1970-01-01
  • 2015-04-02
相关资源
最近更新 更多