嵌套的 RouterPagerAdapter 不在旋转时恢复状态

Nested RouterPagerAdapter's not restoring state on rotation

具有 RouterPagerAdapter 的根控制器承载具有自己的 RouterPagerAdapter.

的控制器 A

控制器 A1 由控制器 A 托管

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

旋转时,根控制器、A 和 A1 收到它们的 onSaveInstanceState/onSaveViewState,但 A 和 A1 都没有收到它 onRestoreInstanceState/onRestoreViewState

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

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

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 的保存状态,并显示错误的当前项目。