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; }