嵌套的 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
的保存状态,并显示错误的当前项目。
具有 RouterPagerAdapter
的根控制器承载具有自己的 RouterPagerAdapter
.
控制器 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
的保存状态,并显示错误的当前项目。