Android

Android学习笔记(六)

Android权威编程指南第六章习题解答,这次的题目有意思,我遇到了一个Bug。

报告编译版本

既然要显示出来,首先要定义TextView,我在Activity_cheat中创建了一个样式(为bug埋下伏笔)

image 132

然后我们在cheatActivity中添加这个

image 133

简单解释一下,首先创建一个TextView标签,指向我们之前定义的格式。然后定义一个CharSequence。

CharSequence与String都能用于定义字符串,String是CharSequence的实现类,但CharSequence的值是可读可写序列,而String的值是只读序列。对于一个抽象类或者是接口类,不能使用new来进行赋值,但是可以通过以下的方式来进行实例的创建:
  CharSequence cs=”hello”;

其实这里使用String也是可以的,但SetText中的参数为

image 134

这时我们运行app

image 135

没有问题,但当我们旋转app后,应用直接闪退,查看抛出的异常

image 136
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中添加

image 137

tools中的内容仅供预览,是不显示在应用中的

现在想想应该怎么实现呢。我的做法是把作弊次数的信息写在activity_main中,然后通过intent传递给cheat_activity。做完修改后再传回cheat_activity。实现的方式和之前“是否查看过答案”是类似的。最后再进行按钮禁用就好。

在cheat_activity修改intent初始化函数和setResult函数

定义键值对和记录次数的变量

image 139

新增一个变量,并把变量存在Extra中

image 138

对于setResult函数,将变化后的值存入,这里注意要加上mCheatIndex的限制条件,不然会减出来负数。

image 141

这样每次用户点击查看答案,就可以更新查看答案的次数了

image 142

在main_activity中修改

新建键值对和变量,并初始化限制查看的次数

image 143

给intent初始化函数传入剩余作弊次数

image 140

然后在onStart函数处添加处理禁用的代码,之所以添加到这里。我通过Log查看到当进入cheatActivity时mainActivity的进程被Stop了。当返回mainActivity时开始Start和Resume,写在这里当返回的时候更新作弊状态。

image 146

防止旋转时丢失信息的写法在前几篇已经介绍过了,加上去就好。下面是实现的效果。

04

至此这个小应用就完成了,下一篇可以写一个新的应用!!

发表评论