嵌套的RouterPagerAdapter不会在轮换时恢复状态

时间:2017-04-20 04:14:35

标签: android android-savedstate conductor

根控制器具有RouterPagerAdapter,主机控制器A具有自己的RouterPagerAdapter

控制器A1由控制器A托管

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

旋转后,根控制器,A和A1会收到onSaveInstanceState/onSaveViewState,但A和A1都不接收onRestoreInstanceState/onRestoreViewState

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

1 个答案:

答案 0 :(得分:0)

将调用

onSaveViewState,但由于onRestoreViewState行,系统不会调用viewPager.setAdapter(null);

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

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

因此,RouterPagerAdapter会调用configureRouter router有一个根控制器,并new Cont()

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

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