我的主要活动是使用视图寻呼机,因此我可以在4个选项卡之间移动,视图寻呼机可以处理所有这些选项卡。我的一个标签页会扫描手机上的联系人以获取其详细信息并将其显示在recylerview中它在同一选项卡中,此任务需要很长时间,我正在异步任务中执行此操作。一切正常,但问题是如果在进行此扫描时我移至另一个选项卡,则数据未应用于回收者视图是可能的,因为该碎片已被销毁。
有没有解决的办法,还是我应该只是防止用户在进行扫描时移动选项卡(如果这样的话,某种代码或指向代码的链接将非常有帮助)。
最佳答案
我不建议您在加载数据时强迫用户停留在页面上。听起来这只会让人沮丧。为此,我有一些想法可以使AsyncTask
保持运行,而Fragment
不可见。
首先,您可以在setOffScreenPageLimit(2)
上调用ViewPager
。由于只有四个Fragment
,这意味着它们全部存储在内存中。
viewPager.setOffScreenPageLimit(2);
另一种方法是,您可以创建无UI的
Fragment
,其唯一功能是执行AsyncTask
,然后在达到onPostExecute()
后将Cursor
结果传递给需要它的Fragment
使用interface
或某种EventBus(即LocalBroadcastManager
或存在的许多其他优秀库之一,例如GreenRobot的EventBus)。编辑如果您喜欢有关如何创建这样的“工作者”
Fragment
的信息,那么在androiddesignpatterns上有一个非常不错且详细的文章。关于android - 在回收者 View 中存储异步数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32919322/