1. 程式人生 > >Android程式設計權威指南(第2版)—第5章挑戰練習

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