【问题标题】:Nested RouterPagerAdapter's not restoring state on rotation嵌套 RouterPagerAdapter 不恢复旋转状态
【发布时间】:2017-04-20 04:14:35
【问题描述】:

具有RouterPagerAdapter 的根控制器托管具有自己的RouterPagerAdapter 的控制器A。

控制器 A1 由控制器 A 托管

[ Root Controller ]
[   A   ] [   B   ]
[A1] [A2]

在轮换时,根控制器、A 和 A1 会收到它们的 onSaveInstanceState/onSaveViewState,但 A 和 A1 都不会收到 onRestoreInstanceState/onRestoreViewState

为什么会这样? 什么是确保所有孩子都将恢复其状态的正确实施方式?

【问题讨论】:

    标签: android android-savedstate conductor


    【解决方案1】:

    onSaveViewState 将被调用,但由于viewPager.setAdapter(null); 行,onRestoreViewState 不会被调用。

    Conductor 文档中的示例在视图被销毁时将适配器设置为 null。

    Override protected void onDestroyView(@NonNull View view) {
        viewPager.setAdapter(null);
        super.onDestroyView(view);
      }
    

    因此,RouterPagerAdapter 将调用 configureRouterrouter 确实没有拥有根控制器,并且将 new Cont()

    if (!router.hasRootController()) {
          router.setRoot(RouterTransaction.with(new Cont()));
        }
    

    另请注意,当将viewPager 嵌套在另一个viewPager 中时,两者都应具有唯一的ID,否则旋转时会覆盖父viewPager 的保存状态,并会显示错误的当前项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-20
      • 1970-01-01
      相关资源
      最近更新 更多