我正在尝试编写的应用程序出现问题。应用程序在viewpager中打开2个片段,这些片段配置为使用配置为使用访问sqllite数据库的contentprovider的相同游标加载器。第一个片段有一个"类别"由游标加载器填充的微调器,第二个片段有一个"类别"微调器和一个"项目"旋转器作为"项目"按类别分组,两个微调器都使用相同的游标加载器填充。
在主屏幕上,我有图标来编辑/插入"类别"或编辑/插入"项目"。如果我点击编辑"类别"它加载第一个片段并选择"类别"在旋转器中。如果我点击编辑"项目"它加载第二个片段并选择"类别"和"项目"根据所选项目。
第一次点击编辑项目时,第二个片段正确加载,并且"类别"和"项目"旋转器显示正确,但如果我返回到开始屏幕并单击编辑另一个"项目"第二个片段加载但不显示数据。调试后我可以看到创建了第二个片段并初始化了游标(initloader)和onCreateLoader,然后创建了第一个片段并初始化了游标(initloader),调用onCreateLoader,然后调用onLoadFinished。永远不会为第二个片段调用onLoadFinished,因此不会显示任何数据。如果我滑动到第一个片段并返回到第二个片段,它就会完成原始调用。
这是一个不能同时使用相同CursorLoader的问题吗?
我尝试使用getLoaderManager().getLoader("data")
来确定是使用initloader还是restartloader,但每个片段似乎都有自己的加载器,而getLoaderManager().getLoader("data")
总是返回null。我还尝试设置表的视图并通过一个片段上的cursorloader访问表,并通过另一个片段上的cursorloader访问该视图。
我希望您了解我所面临的问题,并且可以建议修复或甚至以不同的方式在两个片段中使用相同的数据。我决定使用cursorloader的原因是它如何与微调器集成并自行更新控件中保存的数据。如果需要,我可以发布一些代码。
更新 在进一步调查之后,第二次片段的onStart()和onResume()方法在第二次创建后没有被调用,尽管当我滑动到第一个片段然后再返回到第二个片段时,它们会被调用。