如何在onLoadFinished中使用savedInstanceState Bundle?

时间:2015-01-31 16:42:45

标签: android android-loader

我对装载机有疑问。在我的活动中,我有一个项目列表,并支持使用ActionMode类进行多项选择。当用户旋转设备时,我不希望用户放弃她的选择,这就是为什么在oSaveInstanceState中我保存信息是否打开了多选模式,以及选择了哪些索引。在onCreate中,在我加载项目列表后,我检查bundle状态是否为null,如果是,我继续重新应用选择并重新启动ActionMode。所有这一切都非常简单,并且在主线程上进行加载时工作正常,因为我可以连续加载项目并可选择重新应用选项。

现在我想使用AsyncTaskLoader的子类在后台执行加载。这个想法是:

  • 在onCreate()中创建并触发加载:

    // forceLoad() seems necessary, otherwise Loader.startLoading is never called
    getLoaderManager().initLoader(id, null, this).forceLoad();
    
  • 在LoaderCallbacks.onCreateLoader中,创建了AsyncTaskLoader的子类
  • in Loader.loadInBackground()我执行加载逻辑并返回项目列表
  • 在LoaderCallbacks.onLoadFinished()中我收到Loader和它加载的List,创建一个自定义的RecyclerView.Adapter并在RecyclerView上设置它

所有这一切都很好,但我不知道如何在轮换后应用选择。为此,我需要LoaderCallbacks.onLoadFinished()方法中的savedInstanceState包。

我确实有一个想法:使用savedInstanceState Bundle作为onCreate()中initLoader()方法的第二个参数。我不知道我是否应该这样做,但是 - 是Bundle矿,还是系统可以在onCreate / onRestoreInstanceState之后清理/回收它?加载程序不是加载程序< List>但是一个Loader< Something>,Something保留了我加载的List和Bundle - 这样捆绑包将被传递到它需要的地方 - 在RecyclerView上设置适配器后 - 执行选择并启动ActionMode。

所有这些似乎都是很多工作和不优雅,但绝对可行。你会怎么做?有没有经典的方式?

0 个答案:

没有答案