的时候所以我已经实现了一个saveInstanceState
方法,但我不知道如果我做错了丢失数据。旋转屏幕
发生了什么事是,当屏幕旋转时所显示的问题就变成了从列表中的第一个。但奇怪的是,当问题被回答时,应用程序跳过一个问题并转到下一个问题。
例如,我对问题6.屏幕旋转得到,它会再次质疑1,但如果我回答的问题1,出现的下一个问题是问题8.每个屏幕旋转计数为一个题。我很困惑。
List<Question> mQuestionList;
int score = 0;
int qid = 0;
Question currentQ;
TextView txtQuestion, times, scored;
Button button1, button2, button3, button4;
private static final String TAG = "NoTimerQuestion";
private static final String KEY_INDEX = "index";
private static final String KEY_SCORE = "scoreindex";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DbHelper db = new DbHelper(this); // my question bank class
mQuestionList = db.getAllQuestions(); // this will fetch all questions
currentQ = mQuestionList.get(qid); // the current question
txtQuestion = (TextView) findViewById(R.id.txtQuestion);
times = (TextView) findViewById(R.id.timers);
times.setText("");
button1 = (Button) findViewById(R.id.button1);
button2 = (Button) findViewById(R.id.button2);
button3 = (Button) findViewById(R.id.button3);
button4 = (Button) findViewById(R.id.button4);
scored = (TextView) findViewById(R.id.score);
if(savedInstanceState != null){
qid = savedInstanceState.getInt(KEY_INDEX,0);
score = savedInstanceState.getInt(KEY_SCORE,0);
}
setQuestionView();
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getAnswer(button1.getText().toString());
}
});
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getAnswer(button2.getText().toString());
}
});
button3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getAnswer(button3.getText().toString());
}
});
button4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getAnswer(button4.getText().toString());
}
});
}
public void getAnswer(String AnswerString) {
if (currentQ.getANSWER().equals(AnswerString)) {
score++;
scored.setText("Score : " + score);
}
if (++qid < 20) {
currentQ = mQuestionList.get(qid);
setQuestionView();
} else {
Intent intent = new Intent(NoTimerQuestion.this,
ResultsActivity.class);
Bundle b = new Bundle();
b.putInt("score", score); // Your score
intent.putExtras(b); // Put your score to your next
startActivity(intent);
finish();
}
}
private void setQuestionView() {
txtQuestion.setText(currentQ.getQUESTION());
button1.setText(currentQ.getOPTA());
button2.setText(currentQ.getOPTB());
button3.setText(currentQ.getOPTC());
button4.setText(currentQ.getOPTD());
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState){
super.onSaveInstanceState(savedInstanceState);
Log.i(TAG, "onSaveInstanceState");
savedInstanceState.putInt(KEY_INDEX, qid);
savedInstanceState.putInt(KEY_SCORE, score);
}
}
什么是qid'的'的价值,当你在这里使用它:'currentQ = mQuestionList.get(QID);'? –
最初值为0 – Sai
只是这行之前添加一个'Log.d()'声明。这条线每执行一次**你就会看到'qid'是'0' **。 –