设备旋转后,当前的QuizActivity实例会被系统销毁,创建一个新的QuizActivity实例。而每次创建新的QuizActivity实例时,mCurrectIndex初始化为0,所以才会回到第一题上。
解决方法:在onCreate(Bundle savedInstanceState)方法中传入的参数就是保存的数据,要保存数据时覆盖public void onSaveInstanceState(Bundle savedInstanceState)
方法即可,该方法在onPause(),onStop(),onDestroy()方法之前由系统调用。
package com.onevol.app;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import com.example.geoquiz.R;
public class QuizActivity extends Activity {
private static final String KEY_INDEX = "index";
//新建一个常量作为Bundle的键,将mCurrectIndex变量作为Bundle的值。
private Button mTureButton;
private Button mFalseButton;
private Button mPrevButton;
private Button mNextButton;
private TextView mQuestionTextView;
private TrueFalse[] mQuestionBank = new TrueFalse[] {
new TrueFalse(R.string.question_africa, false),
new TrueFalse(R.string.question_americas, true),
new TrueFalse(R.string.question_asia, true),
new TrueFalse(R.string.question_mideast, false),
new TrueFalse(R.string.question_oceans, true),
};
private int mCurrectIndex = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_quiz);
mTureButton = (Button) findViewById(R.id.ture_button);
mFalseButton = (Button) findViewById(R.id.false_button);
mPrevButton = (Button) findViewById(R.id.prev_button);
mNextButton = (Button) findViewById(R.id.next_button);
mQuestionTextView = (TextView) findViewById(R.id.question_text);
if(savedInstanceState != null){//在onCreate()方法中检查储存的Bundle信息。在UpdateQuestion()方法前检查。
mCurrectIndex = savedInstanceState.getInt(KEY_INDEX);
}
updateQuestion();
mTureButton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
// Toast.makeText(QuizActivity.this, "Incorrect", Toast.LENGTH_SHORT).show();
checkAnswer(true);
}
});
mFalseButton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
// Toast.makeText(QuizActivity.this, "Correct", Toast.LENGTH_SHORT).show();
checkAnswer(false);
}
});
mPrevButton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(mCurrectIndex == 0){
int question = mQuestionBank[mQuestionBank.length -1].getQuestion();
mQuestionTextView.setText(question);
mCurrectIndex = 4;
} else{
mCurrectIndex = (mCurrectIndex -1);
updateQuestion();
}
}
});
mNextButton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
mCurrectIndex = (mCurrectIndex + 1) % mQuestionBank.length;
updateQuestion();
}
});
mQuestionTextView.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
mCurrectIndex = (mCurrectIndex + 1) % mQuestionBank.length;
updateQuestion();
}
});
}
private void updateQuestion() {
int question = mQuestionBank[mCurrectIndex].getQuestion();
mQuestionTextView.setText(question);
}
private void checkAnswer (boolean userPressedTrue){
boolean answerIsTrue = mQuestionBank[mCurrectIndex].isTrueQuestion();
if(userPressedTrue == answerIsTrue){
Toast.makeText(this, "Correct", Toast.LENGTH_SHORT).show();
} else{
Toast.makeText(this, "Incorrect", Toast.LENGTH_SHORT).show();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
return super.onCreateOptionsMenu(menu);
}
@Override
protected void onSaveInstanceState(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putInt(KEY_INDEX, mCurrectIndex);
//将mCurrectIndex储存到Bundle中。
}
}