Android编程权威指南(第2版)—第5章挑战练习

5.5 挑战练习

(1)用户作弊后,可以旋转CheatActivity来清除作弊痕迹

这个可以用书本前面让题目横屏后不重置的方法来进行:

新建两个常量和一个变量

private static final String TAG = "CheatActivity";
private static final String KEY_INDEX = "index";
private boolean mIsCheat;

重写onSaveInstanceState方法

用以存储用户是否作弊的状态
public void onSaveInstanceState(Bundle savedInstanceState) {
    super.onSaveInstanceState(savedInstanceState);
    Log.i(TAG, "onSaveInstanceStateCheat");
    savedInstanceState.putBoolean(KEY_INDEX, mIsCheat);
}
show_answer_button的监听事件里,对 mIsCheat进行赋值
mIsCheat = true;
最后在onCreate方法里增加如下代码:
if (savedInstanceState != null){
    mIsCheat = savedInstanceState.getBoolean(KEY_INDEX, false);
    setAnswerShownResult(true);

    if (mIsCheat){
        mAnswerTextView.setText(R.string.true_button);
    } else {
        mAnswerTextView.setText(R.string.false_button);
    }
}

(2)作弊返回后,用户可以旋转QuitActivity来清除mIsCheater变量值

QuizActivity中修改的方法跟前面的完全一样,需要注意的是,在CheatActivity中,

需要增加一条代码

if (savedInstanceState != null){
    mIsCheat = savedInstanceState.getBoolean(KEY_INDEX, false);
    setAnswerShownResult(true); //add this one
}

不然屏幕反转的时候,CheatActivity里面之前记录的

setAnswerShownResult信息会丢失,这样页面返回时,数据传不到QuizActivity当中
(3)用户可以不断单击next按钮,跳到偷看过答案的问题,从而使作弊记录丢失

有借鉴网友onevo1的方法,http://blog.csdn.net/onevo1/article/details/47109581

但是文中做法比较复杂,我进行了最简单的应用

只修改QuizActivity:

增加arraylist收集作弊题号

private ArrayList<Integer> list = new ArrayList<Integer>();
修改onActivityResult方法,如果作弊记录为true,则题目号入作弊列表
if (mIsCheater == true){
    list.add(mCurrentIndex);
}

修改checkAnswer方法,如果当天题目号在作弊列表中,则显示作弊提示
if (mIsCheater || list.contains(mCurrentIndex)){
    messageResId = R.string.judgment_toast;
} 


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值