心得:
这一章比较简单,总结来说就是在调用函数时,注意版本,对于版本比较敏感的代码段:
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);//在接受信息后,立刻重载文字。
}
}