Android编程权威指南(第4版)
上QQ阅读APP看书,第一时间看更新

2.1 创建新类

在项目工具窗口中,右键单击com.bignerdranch.android.geoquiz类包,选择New → Kotlin File/Class菜单项。如图2-2所示,类名处输入Question,类型选Class,然后点击OK按钮。

图2-2 创建Question类

Android Studio会创建并打开Question.kt文件。如代码清单2-1所示,在其中新增两个成员变量和一个构造函数。

代码清单2-1 Question类中的新增代码(Question.kt)

class Question {
}
data class Question(@StringRes val textResId: Int, val answer: Boolean)

Question类中封装的数据有两部分:问题文本和问题答案(true或false)。

这里,@StringRes注解可以不加,但最好加上,原因有两个。首先,Android Studio内置有Lint代码检查器,有了该注解,它在编译时就知道构造函数会提供有效的资源ID。这样一来,构造函数使用无效资源ID的情况(比如提供的资源ID指向非String类型资源)就能避免,从而阻止了应用的运行时崩溃。其次,注解可以方便其他开发人员阅读和理解你的代码。

为什么textResId是Int,而不是String呢?变量textResId用来保存地理知识问题字符串的资源ID。资源ID总是Int类型,所以这里设置它为Int。

本书中对所有模型类都会使用data关键字。这么做你就会清楚地知道,模型类都是用来保存数据的。另外,针对数据类,编译器会自动定义像equals()、hashCode()、toString()这样的有用函数,不用做这些烦琐的事,开发自然更轻松了。

这样,Question类就完成了。稍后,我们会修改MainActivity类来配合Question类使用。现在,先整体把握一下GeoQuiz应用,看看各个类是如何协同工作的。

我们使用MainActivity创建Question对象集合,然后通过与TextView以及三个Button的交互在屏幕上显示地理知识问题,并根据用户的回答做出反馈。图2-3展示了它们之间的关系。

图2-3 GeoQuiz应用对象图解