我对装载机有疑问。在我的活动中,我有一个项目列表,并支持使用ActionMode类进行多项选择。当用户旋转设备时,我不希望用户放弃她的选择,这就是为什么在oSaveInstanceState中我保存信息是否打开了多选模式,以及选择了哪些索引。在onCreate中,在我加载项目列表后,我检查bundle状态是否为null,如果是,我继续重新应用选择并重新启动ActionMode。所有这一切都非常简单,并且在主线程上进行加载时工作正常,因为我可以连续加载项目并可选择重新应用选项。
现在我想使用AsyncTaskLoader的子类在后台执行加载。这个想法是:
在onCreate()中创建并触发加载:
// forceLoad() seems necessary, otherwise Loader.startLoading is never called
getLoaderManager().initLoader(id, null, this).forceLoad();
所有这一切都很好,但我不知道如何在轮换后应用选择。为此,我需要LoaderCallbacks.onLoadFinished()方法中的savedInstanceState包。
我确实有一个想法:使用savedInstanceState Bundle作为onCreate()中initLoader()方法的第二个参数。我不知道我是否应该这样做,但是 - 是Bundle矿,还是系统可以在onCreate / onRestoreInstanceState之后清理/回收它?加载程序不是加载程序< List>但是一个Loader< Something>,Something保留了我加载的List和Bundle - 这样捆绑包将被传递到它需要的地方 - 在RecyclerView上设置适配器后 - 执行选择并启动ActionMode。
所有这些似乎都是很多工作和不优雅,但绝对可行。你会怎么做?有没有经典的方式?