Android编程权威指南(第三版)第六章 挑战练习与心得

心得:
这一章比较简单,总结来说就是在调用函数时,注意版本,对于版本比较敏感的代码段:

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);//在接受信息后,立刻重载文字。
        }
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值