我知道有很多关于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方法中的捆绑包savedInstanceState是非空的,但它没有int 'currentStep‘。
我尝试了很多方法:为ActionBarActivity更改AppCompatActivity,将对super.onSavedInstanceState的调用移到不同的位置,尝试存储其他变量;但无论我做什么,方法都不会执行。
我的清单中也没有android:configChanges。
我的应用程序正在针对sdk版本22、buildToolsVersion 22.0.1进行编译。
发布于 2015-05-31 02:23:12
除非您的应用程序是在安卓的棒棒糖(API21)版本或更新版本上运行的,否则您的
public void onSaveInstanceState (Bundle outState, PersistableBundle outPersistentState);
将不会被调用,因为它根本不存在于早于21版本的平台上。要支持API 21之前的设备,您必须覆盖以下方法,而不是上述方法:
public void onSaveInstanceState (Bundle outState);
这也适用于21+接口,所以您不需要同时覆盖这两个方法(除非您知道需要处理新方法提供的PersistableBundle
)。
https://stackoverflow.com/questions/30549722
复制相似问题