屏幕旋转后不会调用onSaveInstanceState

时间:2015-05-30 18:18:18

标签: java android android-fragments android-activity

我知道有许多问题都是关于保存事件状态的,但我无法找到问题的答案。

我有一个扩展AppCompatActivity的活动;此活动使用3个片段,它有一个变量'int currentStep'来跟踪正在显示的片段。在onSavedInstanceState方法中,我将currentStep变量存储在bundle中,然后在onCreate方法中我将其恢复。

public class MainActivity extends AppCompatActivity {
    private final String CURRENT_STEP_TAG = "current_step";
    private int currentStep;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pedido);        

        if(savedInstanceState == null) {
            loadFirstFragment();
        } else {            
            currentStep = savedInstanceState.getInt(CURRENT_STEP_TAG);
            if(currentStep == 2){
                //Do some stuff...
            }
        }
    }

    @Override
    public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
        Log.d("deubg", "--------onsaveinstancestate--------");
        outState.putInt(CURRENT_STEP_TAG, currentStep);
        super.onSaveInstanceState(outState, outPersistentState);
    }

 ...

}

事情是,当屏幕变化时,onSavedInstanceState不会被调用,并且根据谷歌文档,它应该。消息“-------- onsaveinstancestate --------”未在控制台中显示。 但是,onCreate方法中的Bundle savedInstanceState在屏幕旋转后为非null,但它没有int'currentStep'。

我尝试了很多东西:为ActionBarActivity改变了AppCompatActivity,将super.onSavedInstanceState的调用移到了不同​​的位置,试图存储其他变量;但不管我做什么,这个方法都不会执行。

此外,我的清单中没有android:configChanges。

我的应用程序正在针对sdk版本22,buildToolsVersion 22.0.1

进行编译

1 个答案:

答案 0 :(得分:66)

除非您的应用在Android或更新版本的Lollipop(API21)版本上正在运行,否则

public void onSaveInstanceState (Bundle outState, PersistableBundle outPersistentState);

NOT 被调用,因为它在早期版本的平台上根本不存在。为了支持API 21之前的设备,您必须覆盖以下方法,而不是上述方法:

public void onSaveInstanceState (Bundle outState);

这也适用于API 21+,因此您不需要覆盖这两种方法(除非您知道需要处理新提供的PersistableBundle)。

See docs