挑战练习---禁止一题多答(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=0;
    }

    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=0;i
  • 在oncreate方法中获取答题情况
if(savedInstanceState!=null){
            mCurrentIndex=savedInstanceState.getInt(KEY_INEX,0);
            int[] answerList=savedInstanceState.getIntArray(KEY_ANSWER);
            for(int i=0;i//将答题情况存储在question中
            }
        }
  • 在判断正误的时候设置inanswered值,回答正确设置为1,回答错误设置为0,代表可以继续答题
private void checkAnswer(boolean userResult){
        boolean questionresult=mQuestions[mCurrentIndex].isAnswerTrue();
        int textResId=0;

        if(userResult==questionresult){
            mQuestions[mCurrentIndex].setIsAnswerd(1);
            textResId=R.string.correct_toast;
        }else{
            mQuestions[mCurrentIndex].setIsAnswerd(0);
            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()>0){
            true_btn.setEnabled(false);
            false_btn.setEnabled(false);
        }else{
            true_btn.setEnabled(true);
            false_btn.setEnabled(true);
        }
    }

你可能感兴趣的:(Android基础)