我知道有许多问题都是关于保存事件状态的,但我无法找到问题的答案。
我有一个扩展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
进行编译答案 0 :(得分:66)
除非您的应用在Android或更新版本的Lollipop(API21)版本上正在运行,否则
public void onSaveInstanceState (Bundle outState, PersistableBundle outPersistentState);
将 NOT 被调用,因为它在早期版本的平台上根本不存在。为了支持API 21之前的设备,您必须覆盖以下方法,而不是上述方法:
public void onSaveInstanceState (Bundle outState);
这也适用于API 21+,因此您不需要覆盖这两种方法(除非您知道需要处理新提供的PersistableBundle
)。