天天看點

Android程式設計權威指南(第三版)第六章 挑戰練習與心得

心得:

這一章比較簡單,總結來說就是在調用函數時,注意版本,對于版本比較敏感的代碼段:

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLIPOP){
...
...
..
}else{
...
}
再一個就是要長期養成學習文檔的習慣。

           

挑戰題:

Android程式設計權威指南(第三版)第六章 挑戰練習與心得

思路:

調用setText()即可

mVersionTextView = (TextView)findViewById(R.id.versionId_text_view);
  String str= "API LEVEL:"+Build.VERSION.SDK_INT;
  mVersionTextView.setText(str);
           
Android程式設計權威指南(第三版)第六章 挑戰練習與心得

思路:

因為顯示在,QuizActivity。是以需要在QuizActivity與CheatActivity中聲明變量mCheatNum,用來計算作弊次數。是以本題的關鍵即mCheatNum參數在QuizActivity與CheatActivity之間的傳遞。

1.QuizActivity -> CheatActivity

①在CheatActivity中複寫newIntent(),讓mCheatNum傳入Intent,故還要在CheatActivity中,聲明鍵值EXTRA_CHEAT_NUM。至此,mCheatNum從QuizActivity->到CheatActivity就編碼完成了:

//QuizActivity
    private int mCheatNum = 0;     
               
        mCheatButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
             //start CheatActivity
             boolean answerIsTrue = mQuestionBank[mCurrentIndex].isAnserTrue();
             Intent intent = CheatActivity.newIntent(MainActivity.this, answerIsTrue, mCheatNum);
             startActivityForResult(intent, REQUEST_CODE_CHEAT);
            }
        });
           
//CheatActivity
private  static final String EXTRA_CHEAT_NUM=
        "android.bignerdranch.geoquiz.cheat_num";
private static final String KEY_CHEAT_STATE = "cheat_state";

public static Intent newIntent(Context pakageContext,boolean answerIsTrue,int cheatNum){
    Intent intent = new Intent(pakageContext,CheatActivity.class);
    intent.putExtra(EXTRA_ANSWER_IS_TRUE,answerIsTrue);
    intent.putExtra(EXTRA_CHEAT_NUM,cheatNum);//傳值入Intent
    return intent;
}
           

2.mCheatNum在CheatActivity->QuizActivity

在CheatActivity中按下showAnser按鈕後,表示使用者完成一次作弊,對mCheatNum進行加1,然後将在CheatActivity頁面回退了後将值傳入QuizActivity.在QuizActivity函數中調用setResult(),在QuizActivity中調用onActivityResult()

//CheatActivity
   private  void setAnswerShownResult(boolean isAnswerShown){
       Intent data = new Intent();
       data.putExtra(EXTRA_ANSWER_SHOWN,isAnswerShown);
       data.putExtra(EXTRA_CHEAT_NUM,mCheatNum);
       setResult(RESULT_OK,data);
   }
           
@Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(resultCode != Activity.RESULT_OK){
            return;
        }
        if(requestCode == REQUEST_CODE_CHEAT){
            if (data==null){
                return;
            }
            mIsCheater[mCurrentIndex] = CheatActivity.wasAnswerShown(data);//調用這個方法的原因是,data中可能存在多個EXTRA,而EXTRA的鍵的值聲明在CheatActivity中
            mCheatNum=CheatActivity.wasCheatNum(data);
            if (mCheatNum >=3){
                mCheatButton.setEnabled(false);
            }
            CharSequence cs=getText(R.string.cheat_button)+"chance:"+Integer.toString(3-mCheatNum);
            mCheatButton.setText(cs);//在接受資訊後,立刻重載文字。
        }
    }