的時候所以我已經實現了一個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' **。 –