我已经使用导体库来控制我的视图。现在,我只尝试在两个方向上进行设计。
我使用过onSaveInstanceState()保存视图状态。我发现,每次更换控制器并旋转屏幕时,就会调用两个控制器上的onSavedInstance(),这会使我的应用程序崩溃。如何保存屏幕上显示的当前控制器的实例。
申请流程A-> B-> C BaseController 第一屏 A-控制器屏幕旋转(称为控制器A上的onSavedInstance())
第二屏(从A导航) B- Contoller-屏幕旋转(称为控制器A和B上的onSavedInstance())
第三屏(从B导航) C-控制器-屏幕旋转(控制器A,B和C上的onSavedInstance()称为)
我已经尝试过isAttached(),仅让显示的控制器保存实例,但是不知何故只返回false
protected void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
if (isAttached()) {}
答案 0 :(得分:0)
我找到了解决问题的方法。我不知道它是否正确,但可能会有所帮助。 addChangeListner监听控制器更改事件的更改。我在BaseController中创建了一个抽象函数,当调用addChange侦听器时会调用该抽象函数。我有一个布尔值,在每个控制器中总是如此。但是,当控制器更改时,将调用我创建的此抽象函数,并将布尔值更改为false。 因此,只有连接了屏幕的控制器才能保存实例状态。
`@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
if (isAttached) {
// State that I want to save
}
}`