每个控制器都会在方向更改时调用onSavedInstance()吗?

时间:2019-07-15 12:43:18

标签: java android conductor

我已经使用导体库来控制我的视图。现在,我只尝试在两个方向上进行设计。

我使用过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()) {}

1 个答案:

答案 0 :(得分:0)

我找到了解决问题的方法。我不知道它是否正确,但可能会有所帮助。 addChangeListner监听控制器更改事件的更改。我在BaseController中创建了一个抽象函数,当调用addChange侦听器时会调用该抽象函数。我有一个布尔值,在每个控制器中总是如此。但是,当控制器更改时,将调用我创建的此抽象函数,并将布尔值更改为false。 因此,只有连接了屏幕的控制器才能保存实例状态。

`@Override
    protected void onSaveInstanceState(@NonNull Bundle outState) {
        super.onSaveInstanceState(outState);
        if (isAttached) {
            // State that I want to save 
        }
    }`