《Android编程权威指南(第3版)》:挑战练习

 

用户答完某道题,就禁掉那道题对应的按钮,防止用户一题多答。 

用户答完全部题后,显示一个toast消息,给出百分比形式的评分。 

 

Question.java中添加

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

    public Question(int textResId, boolean answerTrue){
        this.mTextResId = textResId;
        this.mAnswerTrue = answerTrue;
        this.mAnswered = 0;
    }

    public int isAnswered(){
        return mAnswered;
    }
    public void setAnswered(int answered){
        mAnswered = answered;
    }
}

QuizActivity中修改部分:

public class QuizActivity extends AppCompatActivity {

    private static final String ANSWERED_LIST = "answered_list";
    private static final String CORRECT_NUM = "correct_num";
    private static final String INCORRECT_NUM = "incorrect_num";
    private int correct = 0;//正确答案数量
    private int incorrect = 0;//错误答案数量
}

 

@Override
    protected void onSaveInstanceState(Bundle saveInstanceState){
            super.onSaveInstanceState(saveInstanceState);
            Log.i(TAG, "onSaveInstanceState");
            saveInstanceState.putInt(KEY_INDEX, mCurrentIndex);
            int[] vis = new int[mQuestionBank.length];
            for (int i = 0; i < mQuestionBank.length; i++)
                vis[i] = mQuestionBank[i].isAnswered();
            saveInstanceState.putIntArray(ANSWERED_LIST, vis);  //保留答题情况
            saveInstanceState.putInt(CORRECT_NUM, correct);     //保留答对题数
            saveInstanceState.putInt(INCORRECT_NUM, incorrect);//保留答错题数
    }
if (savedInstanceState != null){
            mCurrentIndex = savedInstanceState.getInt(KEY_INDEX, 0);
            int[] vis = savedInstanceState.getIntArray(ANSWERED_LIST);
            for (int i = 0; i < mQuestionBank.length; i++)  //恢复答题情况
                mQuestionBank[i].setAnswered(vis[i]);
            correct = savedInstanceState.getInt(CORRECT_NUM);//恢复答对题数
            incorrect = savedInstanceState.getInt(INCORRECT_NUM);//恢复答错题数
        }

用setEnabled设置按钮状态

public void setButtons(){
        if (mQuestionBank[mCurrentIndex].isAnswered() > 0){
            mTrueButton.setEnabled(false);
            mFalseButton.setEnabled(false);
        }else{
            mTrueButton.setEnabled(true);
            mFalseButton.setEnabled(true);
        }
    }
private  void checkfinish(){
        if (correct + incorrect == mQuestionBank.length){
            double ans = (double)correct / (double)mQuestionBank.length * 100.0;
            String mes = "正确率" + String.valueOf(ans) + "%";
            Toast.makeText(this, mes, Toast.LENGTH_SHORT).show();
        }
    }
private void checkAnswer(boolean userPressedTrue){
        boolean answerIsTrue = mQuestionBank[mCurrentIndex].isAnswerTrue();
        int messageResId = 0;
        mQuestionBank[mCurrentIndex].setAnswered(1);

        if (userPressedTrue == answerIsTrue){
            messageResId = R.string.correct_toast;
            correct++;
        }else{
            messageResId = R.string.incorrect_toast;
            incorrect++;
        }
        Toast.makeText(this, messageResId, Toast.LENGTH_SHORT).show();
    }

 

@Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, "onCreate(Bundle) called");
        setContentView(R.layout.activity_quiz);

        if (savedInstanceState != null){
            mCurrentIndex = savedInstanceState.getInt(KEY_INDEX, 0);
            int[] vis = savedInstanceState.getIntArray(ANSWERED_LIST);
            for (int i = 0; i < mQuestionBank.length; i++)  //恢复答题情况
                mQuestionBank[i].setAnswered(vis[i]);
            correct = savedInstanceState.getInt(CORRECT_NUM);//恢复答对题数
            incorrect = savedInstanceState.getInt(INCORRECT_NUM);//恢复答错题数
        }

        mQuestionTextView = (TextView)findViewById(R.id.question_text_view);

        mTrueButton = (Button)findViewById(R.id.true_button);
        mTrueButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                checkAnswer(true);
                setButtons();
                checkfinish();
            }
        });

        mFalseButton = (Button)findViewById(R.id.false_button);
        mFalseButton.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
                checkAnswer(false);
                setButtons();
                checkfinish();
            }
        });

        mNextButton = (Button)findViewById(R.id.next_button);
        mNextButton.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
                mCurrentIndex = (mCurrentIndex + 1) % mQuestionBank.length;
                updateQuestion();
                setButtons();
            }
        });

        mPrevButton = (Button)findViewById(R.id.pre_button);
        mPrevButton.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
                mCurrentIndex = (mCurrentIndex - 1 + mQuestionBank.length) % mQuestionBank.length;
                updateQuestion();
                setButtons();
            }
        });

        updateQuestion();
        setButtons();
        checkfinish();
    }

 

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android编程权威指南第4》是一本非常有价值的Android编程指南。该书由美国程序员Bill Phillips、Chris Stewart和Brian Hardy合著,对Android开发的方方面面进行了深入的解析和讲解。 这本书对于想要入门或提升自己在Android开发领域的开发者来说是一本理想的教材。它详细介绍了Android平台的基本原理、架构和开发工具,并通过实际案例和示例代码,讲解了如何使用Java语言和Android SDK进行开发,如何构建用户界面、处理用户输入、管理数据、调试和测试应用程序等等。 《Android编程权威指南第4》的内容涵盖了Android开发的方方面面,包括Activity、Fragment、Intent、Broadcast Receiver、Service、Content Provider等组件的使用,以及Android系统的UI设计、网络通信、数据存储、多媒体处理等相关技术。此外,该书还介绍了如何使用Android Studio进行项目管理和本控制,以及如何发布应用到Google Play商店。 该书语言简练、通俗易懂,结合了理论与实践,帮助读者从零开始深入学习Android开发。无论是初学者还是有一定经验的开发者,都可以通过阅读本书,了解到最新的Android开发技术和最佳实践。 总的来说,《Android编程权威指南第4》是一本对于想要学习和掌握Android开发的人来说必备的书籍,通过深入浅出的讲解和丰富的实例,帮助读者掌握Android开发的核心知识和技巧。无论是个人开发者还是企业开发团队,都可以通过阅读该书,提高自己在Android开发领域的能力和水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值