效果
从上述gif图可以看出,当题目跳转到“武汉”时,此时横屏依然不会导致数据丢失,而是继续显示。
代码
1.新增一个常量
private static final String KEY_INDEX="INDEX";
1.在MainActivity.java中新增以下代码,保存当前题目的变量:
@Override
public void onSaveInstanceState(Bundle onSaveInstanceState) {
super.onSaveInstanceState(onSaveInstanceState);
Log.i(TAG,"onSaveInstanceState");
onSaveInstanceState.putInt(KEY_INDEX,index);
}
这段代码的意思是保存当前题目的序号,把当前题目的序号保存到Bundle类型的onSaveInstanceState中,因为安卓应用的显示是从onCreate(Bundle onSaveInstanceState){…}开始的,即传入的参数是Bundle类型的。
安卓专门为此提供了方法onSaveInstanceState(Bundle onSaveInstanceState)用于保存参数。onSaveInstanceState的putInt方法可以把整形的index保存在我们实现设定的好的常量中。
2.在onCreate方法中加入下述代码,用于检测当前是否有保存好的数据
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG,"onCreate(Bundle)called");
setContentView(R.layout.activity_main);
if(savedInstanceState!=null){
index=savedInstanceState.getInt(KEY_INDEX,0);
question=mQuestionBank[index].getId();
}
}
上述代码中,if(){…}就判断了当前是否已经保存过数据,如果保存过数据,那么调用savedInstanceState的getInt方法把保存的题号放在当前的题号中。然后一切照常显示。
小结
利用onSaveInstanceState方法保存数据,在onCreate方法的开头中检测当前是否已有保存过的数据。