自定义SQLite Loader - 从另一个Fragment / Activity收听更新

时间:2014-06-13 15:34:32

标签: android sqlite android-fragments android-loadermanager

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

我有2个片段:

Fragment A - 有一个带有适配器的ListView,它使用自定义Loader从数据库中获取数据。

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

由于片段B不能(也不应该根据我的理解)访问片段A中的Loader,因此编辑片段B中的项目不会更新片段A.

我该如何解决这个问题?这可以用装载机解决吗?

1 个答案:

答案 0 :(得分:0)

如果两个片段都在同一个Activity中,则可以访问相同的loader。我认为你的问题是你正在片段内初始化加载器:

getLoaderManager().initLoader(...);

当你应该这样做时:

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

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

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

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