在我的应用程序中,我有一个SQLIte数据库。 我有一个需要来自数据库的数据的ListView,所以我想我会试试Loaders。
我有2个片段:
Fragment A - 有一个带有适配器的ListView,它使用自定义Loader从数据库中获取数据。
片段B - 这是一个“编辑项目”片段,其中的项目被编辑,然后在数据库中更新。
由于片段B不能(也不应该根据我的理解)访问片段A中的Loader,因此编辑片段B中的项目不会更新片段A.
我该如何解决这个问题?这可以用装载机解决吗?
答案 0 :(得分:0)
如果两个片段都在同一个Activity中,则可以访问相同的loader
。我认为你的问题是你正在片段内初始化加载器:
getLoaderManager().initLoader(...);
当你应该这样做时:
getActivity().getLoaderManager().initLoader(...);
在第二个片段中使用同一行代码访问同一个加载器,并显示要编辑的数据。一旦编辑并更新了数据库,就需要调用forceLoad()
(因为你没有在自定义加载器中实现观察者),将新数据加载到加载器中:
getActivity().getLoaderManager().getLoader(loaderId).forceLoad();
当您返回第一个片段时,将创建视图层次结构并调用initLoader()
(通常在onCreateView()
或onActivityCreated()
中实现),这将直接调用{{1}因为加载器已经存在并且已经被第二个片段更新了。