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

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


你可能感兴趣的:(Android编程权威指南(第2版)—第5章挑战练习)