在我的应用程序我有一个SQLIte数据库。我有一个ListView,需要从数据库的数据,所以我想我会给加载器一个尝试。
我有两个片段:
Fragment A -有一个ListView和一个适配器,使用自定义Loader从DB获取数据。
片段B——这是一个"编辑条目"片段,条目被编辑,然后在数据库中更新。
由于片段B不能(也不应该从我的理解)访问片段A中的Loader,编辑片段B中的项目不会更新片段A。
我该如何解决这个问题?这个问题可以用Loaders解决吗?
如果两个片段在同一个Activity中,它们可以访问相同的loader
。我认为你的问题是,你是初始化加载器内部的片段,像这样:
getLoaderManager().initLoader(...);
当你应该这样做的时候:
getActivity().getLoaderManager().initLoader(...);
在第二个片段中使用同一行代码访问相同的加载器,并显示要编辑的数据。编辑并更新数据库之后,需要调用forceLoad()
(因为没有在自定义加载器中实现观察者),将新数据加载到加载器中:
getActivity().getLoaderManager().getLoader(loaderId).forceLoad();
当你回到第一个片段时,将创建视图层次结构并调用initLoader()
(通常在onCreateView()
或onActivityCreated()
中实现),这将直接调用onLoadFinished()
,因为加载器已经存在并且已经被第二个片段更新。