我知道有很多关于 onSaveInstanceState 的问题,但我无法找到问题的答案。
我有一个扩展 AppCompatActivity 的活动;此活动使用 3 个片段,它有一个变量“int currentStep”来跟踪正在显示的片段。在 onSavedInstanceState 方法中,我将 currentStep 变量存储在包中,然后在 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 savingInstanceState 不为 null,但它没有 int 'currentStep'。
我尝试了很多事情:将 AppCompatActivity 更改为 ActionBarActivity,将 super.onSavedInstanceState 的调用移动到不同的位置,尝试存储其他变量;但无论我做什么,该方法都不会执行。
另外,我的清单中没有 android:configChanges 。
我的应用程序正在针对 sdk 版本 22、buildToolsVersion 22.0.1 进行编译
除非你的应用程序是running在 Lollipop (API 21) 版本的 Android 或更高版本上,您的
public void onSaveInstanceState (Bundle outState, PersistableBundle outPersistentState);
will NOT被调用,因为它根本不存在于 21 之前的平台版本上。要支持 API 21 之前的设备,您必须重写以下方法,而不是上面的方法:
public void onSaveInstanceState (Bundle outState);
这也适用于 API 21+,因此您当然不需要重写这两个方法(除非您知道需要处理PersistableBundle
新的优惠)。
See docs https://developer.android.com/reference/android/app/Activity.html#onSaveInstanceState(android.os.Bundle,%20android.os.PersistableBundle).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)