心得:
這一章比較簡單,總結來說就是在調用函數時,注意版本,對于版本比較敏感的代碼段:
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLIPOP){
...
...
..
}else{
...
}
再一個就是要長期養成學習文檔的習慣。
挑戰題:
思路:
調用setText()即可
mVersionTextView = (TextView)findViewById(R.id.versionId_text_view);
String str= "API LEVEL:"+Build.VERSION.SDK_INT;
mVersionTextView.setText(str);
思路:
因為顯示在,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);//在接受資訊後,立刻重載文字。
}
}