Android权威编程指南第六章习题解答,这次的题目有意思,我遇到了一个Bug。
报告编译版本
既然要显示出来,首先要定义TextView,我在Activity_cheat中创建了一个样式(为bug埋下伏笔)
然后我们在cheatActivity中添加这个
简单解释一下,首先创建一个TextView标签,指向我们之前定义的格式。然后定义一个CharSequence。
CharSequence与String都能用于定义字符串,String是CharSequence的实现类,但CharSequence的值是可读可写序列,而String的值是只读序列。对于一个抽象类或者是接口类,不能使用new来进行赋值,但是可以通过以下的方式来进行实例的创建:
CharSequence cs=”hello”;
其实这里使用String也是可以的,但SetText中的参数为
这时我们运行app
没有问题,但当我们旋转app后,应用直接闪退,查看抛出的异常
Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
setText的对象没有参考,原来是没定义横屏布局文件导致出现bug
添加回来后就可以正常运行了,以后一定要注意定义横屏的id,不然会闪退。
限制作弊次数
限制作弊次数,首先我们先编辑显示的xml文件
在string中定义
<string name="cheat_index">剩余作弊次数</string>
在activity_main和land/activity_main中添加
tools中的内容仅供预览,是不显示在应用中的
现在想想应该怎么实现呢。我的做法是把作弊次数的信息写在activity_main中,然后通过intent传递给cheat_activity。做完修改后再传回cheat_activity。实现的方式和之前“是否查看过答案”是类似的。最后再进行按钮禁用就好。
在cheat_activity修改intent初始化函数和setResult函数
定义键值对和记录次数的变量
新增一个变量,并把变量存在Extra中
对于setResult函数,将变化后的值存入,这里注意要加上mCheatIndex的限制条件,不然会减出来负数。
这样每次用户点击查看答案,就可以更新查看答案的次数了
在main_activity中修改
新建键值对和变量,并初始化限制查看的次数
给intent初始化函数传入剩余作弊次数
然后在onStart函数处添加处理禁用的代码,之所以添加到这里。我通过Log查看到当进入cheatActivity时mainActivity的进程被Stop了。当返回mainActivity时开始Start和Resume,写在这里当返回的时候更新作弊状态。
防止旋转时丢失信息的写法在前几篇已经介绍过了,加上去就好。下面是实现的效果。
至此这个小应用就完成了,下一篇可以写一个新的应用!!