Java 屏幕旋转后未调用onSaveInstanceState
我知道在SaveInstanceState上有很多问题,但我无法找到问题的答案 我有一个扩展了我的活动的活动;此活动使用3个片段,它有一个变量“int currentStep”来跟踪显示的片段。在onSavedInstanceState方法中,我将currentStep变量存储在bundle中,然后在onCreate方法中恢复它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
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及以上版本。