Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 屏幕旋转后未调用onSaveInstanceState_Java_Android_Android Fragments_Android Activity - Fatal编程技术网

Java 屏幕旋转后未调用onSaveInstanceState

Java 屏幕旋转后未调用onSaveInstanceState,java,android,android-fragments,android-activity,Java,Android,Android Fragments,Android Activity,我知道在SaveInstanceState上有很多问题,但我无法找到问题的答案 我有一个扩展了我的活动的活动;此活动使用3个片段,它有一个变量“int currentStep”来跟踪显示的片段。在onSavedInstanceState方法中,我将currentStep变量存储在bundle中,然后在onCreate方法中恢复它 public class MainActivity extends AppCompatActivity { private final String CURRE

我知道在SaveInstanceState上有很多问题,但我无法找到问题的答案

我有一个扩展了我的活动的活动;此活动使用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”

我尝试过很多事情:将AppCompatActivity更改为ActionBarActivity,将super.onSavedInstanceState的调用移动到不同的位置,尝试存储其他变量;但无论我做什么,方法都不会执行

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


我的应用程序是根据sdk版本22、buildToolsVersion 22.0.1编译的,除非您的应用程序在Android或更新版本的棒棒糖(API21)上运行

public void onSaveInstanceState (Bundle outState, PersistableBundle outPersistentState);
将不会调用,因为它在早于21的平台版本中根本不存在。要支持API 21之前的设备,您必须覆盖以下方法,而不是上述方法:

public void onSaveInstanceState (Bundle outState);
这也适用于API 21+,因此您当然不需要覆盖这两种方法(除非您知道需要处理新方法提供的
PersistableBundle


.

谢谢!我不知道有一个新版本的方法。另一个问题,will-onSaveInstanceState(Bundle-outState);在运行android API21+的设备中被调用?或者我需要覆盖这两种方法吗?谢谢,节省了我一些时间!:Dphenomenal—这个问题已经讨论了一段时间—但很明显,我刚刚做了一个测试—它不适用于API21,您需要API22及以上版本。