天天看點

挑戰練習---禁止一題多答(3.7)(Android程式設計權威指南)

我為question添加屬性isAnswerd,判斷是否答題,該值為1代表已經答過,為0代表沒有答題,或者答錯了,可以繼續答題。

同樣,将答題的結果存儲在Bundle中,在oncreate方法中擷取,

下面是部分涉及的源代碼:

* 首先是在question實體類中添加相應屬性:

public class Question{
    private int mTextResId;
    private boolean mAnswerTrue;
    private int isAnswerd;

    public Question(int textResId, boolean answerTrue) {
        mTextResId = textResId;
        mAnswerTrue = answerTrue;
        isAnswerd=;
    }

    public int getTextResId() {
        return mTextResId;
    }

    public void setTextResId(int textResId) {
        mTextResId = textResId;
    }

    public boolean isAnswerTrue() {
        return mAnswerTrue;
    }

    public void setAnswerTrue(boolean answerTrue) {
        mAnswerTrue = answerTrue;
    }

    public int getIsAnswerd() {
        return isAnswerd;
    }

    public void setIsAnswerd(int isAnswerd) {
        this.isAnswerd = isAnswerd;
    }
}
           
  • 設定key值并在saveInstanceState方法中進行存儲
private static String KEY_ANSWER="KEY_ANSWER";
@Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        Log.d(TAG,"onSaveInstanceState() called");
        outState.putInt(KEY_INEX,mCurrentIndex);
        int[] answerList=new int[mQuestions.length];//存儲是否已經答過該題的情況
        for(int i=;i<answerList.length;i++){
            answerList[i]=mQuestions[i].getIsAnswerd();
        }
        outState.putIntArray(KEY_ANSWER,answerList);
    }
           
  • 在oncreate方法中擷取答題情況
if(savedInstanceState!=null){
            mCurrentIndex=savedInstanceState.getInt(KEY_INEX,);
            int[] answerList=savedInstanceState.getIntArray(KEY_ANSWER);
            for(int i=;i<mQuestions.length;i++){
                mQuestions[I].setIsAnswerd(answerList[I]);//将答題情況存儲在question中
            }
        }
           
  • 在判斷正誤的時候設定inanswered值,回答正确設定為1,回答錯誤設定為0,代表可以繼續答題
private void checkAnswer(boolean userResult){
        boolean questionresult=mQuestions[mCurrentIndex].isAnswerTrue();
        int textResId=;

        if(userResult==questionresult){
            mQuestions[mCurrentIndex].setIsAnswerd();
            textResId=R.string.correct_toast;
        }else{
            mQuestions[mCurrentIndex].setIsAnswerd();
            textResId=R.string.incorrect_toast;
        }
        ButtonEnabled();
        Toast.makeText(this, textResId, Toast.LENGTH_SHORT).show();
    }
           
private void update(){
        int question=mQuestions[mCurrentIndex].getTextResId();
        mQuestion_text.setText(question);
        ButtonEnabled();
    }
           

注意這兩個地方都要使用,通過每次index變化都要判斷一次,否則保留的狀态就是原先的狀态,就會出現即使沒有答過這道題也不能作答的情況

  • 設定button是否可以點選ButtonEnabled()方法
public void ButtonEnabled(){
        if(mQuestions[mCurrentIndex].getIsAnswerd()>){
            true_btn.setEnabled(false);
            false_btn.setEnabled(false);
        }else{
            true_btn.setEnabled(true);
            false_btn.setEnabled(true);
        }
    }