Android编程权威指南第三章的学习

  • 应用启动并创建Activity实例后,会调用onCreate(Bundle)、 onStart()和onResume()方法。

  • 单击设备的后退键,相当于告诉Android系统: “activity已用完,现在不需要它了。”随即, 系统就销毁了该activity的视图及其内存里的相关信息。这实际是Android系统节约使用设备有限 资源的一种方式。 会调用onPause(),onStop(),onDestory()方法。

  • 单击主屏幕,会调用onPause(),onStop()方法。
    —————————————————————————————————————————————————————————————
    3.2设备旋转与activity生命周期
    设备旋转时,系统会销毁当前QuizActivity实例,然后创建一个新的QuizActivity实例。
    如何解决这个问题?
    为设备配置变更新建备选资源,只要设备旋转至水平方向,Android就会自动发现并识别它。具体做法为在在res目录下创建layout-land目录,然后再在layout-land目录下创建资源文件,具体做法见P53。
    —————————————————————————————————————————————————————————————
    3.2设备旋转与activity生命周期
    要修复这个缺陷,旋转后新建的QuizActivity需要知道mCurrentIndex变量的原值。显然, 在设备运行中发生配置变更时,若设备旋转,需想个办法保存以前的数据。覆盖以下Activity 方法就是一种解决方案:

    protected void onSaveInstanceState(Bundle outState)
    该方法通常在onStop()方法之前由系统调用,除非用户按后退键。(记住,按后退键就是告 诉Android,activity用完了。随后,该activity就完全从内存中被抹掉,自然,也就没有必要为重建保存数据了。
    方法onSaveInstanceState(Bundle)的默认实现要求所有activity视图将自身状态数据保存 在Bundle对象中。Bundle是存储字符串键与限定类型值之间映射关系(键值对)的一种结构。
    —————————————————————————————————————————————————————————————
    覆盖 onSaveInstanceState(Bundle)方法
    可通过覆盖onSaveInstanceState(Bundle)方法,将一些数据保存在bundle中,然后在 onCreate(Bundle)方法中取回这些数据。处理设备旋转问题时,将采用这种方式保存mCurrent- Index变量值。

在这里插入图片描述
在这里插入图片描述

3.7 挑战练习
用户答完某道题,就禁掉那道题对应的按钮,防止用户一题多答。
解答:
在这里插入图片描述
新增一个mAnswerOrNot属性,初始为false,代表没有回答该问题。当点击了mTrueButton或者mFalseButton时,设置mTrueButton和mFalseButton为不可点击
在这里插入图片描述
updataQuestion函数里添加判断该问题是否回答过的if else分支语句,因为点击上一题或下一题时mTrueButton和mFalseButton是否点击可能会随题目发生改变。
在这里插入图片描述

3.8 挑战练习
用户答完全部题后,显示一个toast消息,给出百分比形式的评分。
解答:
Question类里新增一个属性mCorrectOrNot属性用于表示该问题是否回答正确。
在这里插入图片描述
mTrueButton和mFalseButton的点击事件里添加一条判断语句用于判断是否为最后一题,若是的话,遍历问题数组中每个对象的mCorrectOrNot属性的值,然后得出结果并转化为百分数显示出来(注:这里的Toast.make函数的一个属性为this时会报错,上网查了改为这个后就行了,但原因还没弄明白)
在这里插入图片描述

checkAnswer函数里给每道题的mCorrectOrNot属性赋值,表明该问题是否回答正确。
在这里插入图片描述

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值