《Android编程权威指南》-读书笔记(四)-GeoQuiz功能扩展

《Android编程权威指南》-读书笔记

-GeoQuiz功能扩展

从现在开始,这本书开始扩展应用。在这次扩展中我们将会学习以下知识点:

  • 创建一个新类
  • 更新视图层
  • 更新控制层
  • Git代码的修改和提交
  • Android Studio 在设备中运行该应用
  • 给按钮添加图片资源

功能:下图是GeoQuiz应用对象图解。应用的对象按模型、控制器和视图的类别被分为三部分。Android应用是给予模型-控制器-视图(Model-View-Controller,简称MVC)的架构模式进行设计的。

创建一个类 TrueFalse

这个类定义了2个变量 mQuestion、mTrueQuestion。

mQuestion用来保存地理知识问题支付穿的资源ID。

mTrueQuestion用来确定答案正确与否。

右键->new class 类的名称为TrueFalse。

private int mQuestion;

private boolean mTrueQuestion;

添加2个private 的变量

使用快键 alt+Insert 激活选择Constructor 和 Getter and Setter。

Git操作:

$git add .

$git commit –m "add a new class"

$git push GeoQuiz master

提交之后可以查看代码

http://git.oschina.net/canglin/GeoQuiz/commit/eea5ae599c3830daaf49eb6ac380b49a2fc07193

更新视图层

修改activity_quiz.xml

给TextView添加一个id为@+id/question_text_view,添加一个按钮id为@+id/next_button。

更新字符串资源定义(strings.xml)

添加字符串

<string name="next_button">Next</string>

更新控制层

首先申明

private Button mNextButton;

private TextView mQuestionTextView;

新增的按钮变量和问题显示空间TextView,然后创建一个TrueFalse的对象数组,因为是例子程序,所以直接给他创建数据。

private TrueFalse[] mQuestionBank = new TrueFalse[]

{

new TrueFalse(R.string.question_oceans,true),

new TrueFalse(R.string.question_mideast,false),

new TrueFalse(R.string.question_africa,false),

new TrueFalse(R.string.question_americas,true),

new TrueFalse(R.string.question_asia,true),

};

这个数据创建在了QuizActivity里面,这里是控制层,在真实的程序里这是不优的行为。

初始化第一个问题,在onCreate()中

mQuestionTextView = (TextView)findViewById(R.id.question_text_view);

int question = mQuestionBank[mCurrentIndex].getQuestion();

mQuestionTextView.setText(question);

这段代码首先得到TextView的引用,然后通过setText(资源id),显示问题。资源id为int类型。

添加NextButton

mNextButton = (Button)findViewById(R.id.next_button);

mNextButton.setOnClickListener(new View.OnClickListener(){

@Override

public void onClick(View v){

mCurrentIndex = (mCurrentIndex+1) % mQuestionBank.length;

int question = mQuestionBank[mCurrentIndex].getQuestion();

mQuestionTextView.setText(question);

}

});

这段代码首先得到NextButton的引用,然后给它绑定click事件,每点击一次更换一次问题,然后得到这个新问题的资源id,在通过setText(资源id)来刷新问题。

到这里功能已经能做到每次点击Next就会换一个问题,效果如下:

点击NEXT后:

我们提交一次代码,这次代码中修改了资源文件,修改了交互界面,修改了交互代码。

Git操作如下:

在工作目录下右键 Git Bush

$git status

$git add .

$git status

首先提交修改

$git commit –m "Add a new button,adds several new issues,adds a new button event"

然后提交到git.oschina.net

$git push GeoQuiz master

代码的修改情况如下

http://git.oschina.net/canglin/GeoQuiz/commit/6be7ee83e2a92f11fd3e4c73072c0e2ef191b162

代码的重构

在更新mQuestionTextView变量的代码分布在了不同的地方。书中指引我们做了第一次简单的重构,将处理的弓弓代码放在了单独的私有方法里面。

private void updateQuestion(){

int question = mQuestionBank[mCurrentIndex].getQuestion();

mQuestionTextView.setText(question);

}

添加私有方法updateQuestion然后替换掉重复的地方。

Git操作

$git status

$git add .

$git commit –m "refactoring code"

$git push GeoQuiz master

重构后代码如下:

http://git.oschina.net/canglin/GeoQuiz/commit/0fcfdcf2fa5e699ebf2e145ed9d468c3f9d28599

验证问题的正确性

创建一个私有的方法checkAnswer()

private void checkAnswer(boolean userPresedTrue) {

boolean answerIsTrue = mQuestionBank[mCurrentIndex].isTrueQuestion();

int messageResId = 0;

if(userPresedTrue == answerIsTrue) {

messageResId = R.string.correct_toast;

} else {

messageResId = R.string.incorrect_toast;

}

Toast.makeText(this,messageResId,Toast.LENGTH_SHORT).show();

}

用此方法替换掉true_button,false_button里面的事件代码。代码如下:

http://git.oschina.net/canglin/GeoQuiz/commit/03989c691e966b1b5d79975993ed114722cb1365

实现此功能后,如果一个错误的答案你选择了TRUE后,会提示incorect。如下图所示:

Android Studio在设备中运行该应用

点击 Run->Edit Configurations…

在Target Device 里面勾选USB device(默认的是Show chooser diaglog)。

点击确定。然后Run->Run ‘app‘

给按钮添加图片资源

随便找一个图片arrow_right.png 修改next button的代码如下:

<Button

android:id="@+id/next_button"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/next_button"

android:drawableRight="@drawable/arrow_right"/>

显示效果如下:

在git中提交代码

http://git.oschina.net/canglin/GeoQuiz/commit/eea0734423d7c2bee60d74430b0a26904a3ce61c

时间: 2024-10-13 11:27:48

《Android编程权威指南》-读书笔记(四)-GeoQuiz功能扩展的相关文章

Android编程权威指南-读书笔记(二)-第一个小程序

Android编程权威指南-读书笔记(二) -第一个小程序 第一个例子介绍 应用名为GeoQuiz.用户通过单击True或False按钮来回答屏幕上的问题,GeoQuiz可即时反馈答案正确与否. 这个例子为我们简单介绍了几个基本组件的使用,以及基本的事件监听.让我们对基本组件的使用和事件的监听有一个基本的了解. 这篇文章分为2个部分,第一部分就是创建简单的UI.第二个部分就是对这个UI增加代码来响应一些操作. (注:所有不明白或者不理解的东西其实都不重要,后面都会有更详细的介绍.) 本章的目标

android开发权威指南读书笔记

第17章 Fragment 1.在res目录下增加 layout-sw600dp 目录,用于存放7英寸及以上尺寸屏幕的布局文件.10英寸以上平板用 sw720dp.如果是更小的屏幕,如 480*800 则要用 sw480dp 2.在布局文件中直接以<fragment> 标签方式嵌入时候,要标明class属性,即 类似  class = "com.abc.MyFragment"   也可以用 android:name ,与class属性完全相同 3.通过fragment.ge

《Android编程权威指南》-读书笔记(三)Git初探

<Android编程权威指南>-读书笔记(三)Git初探 版本控制-Git 为什么要使用版本控制 什么是版本控制?我为什么要关心它呢?版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统.在本书所展示的例子中,我们仅对保存着软件源代码的文本文件作版本控制管理,但实际上,你可以对任何类型的文件进行版本控制. 如果你是位图形或网页设计师,可能会需要保存某一幅图片或页面布局文件的所有修订版本(这或许是你非常渴望拥有的功能).采用版本控制系统(VCS)是个明智的选择.有了它你就

《Android编程权威指南》-读书笔记(五)-挑战练习

<Android编程权威指南>-读书笔记(五) -挑战练习 为了巩固学习,为了建立信心.开始进行如下挑战: 挑战练习一:为TextView添加监听器 书中给出了提示,TextView,Button都是View的子类,都可以设置OnClickListener()直接加入如下代码: mQuestionTextView.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v){ mCurr

《Android编程权威指南》-读书笔记(十一) 完善CriminalIntent

<Android编程权威指南>-读书笔记(十一) 完善CriminalIntent 在上篇文章中,我们跟随本书作者,使用了单个的Fragment做了最简单的插入操作.本篇文章将跟随作者进行更深入的完善各种功能. 本章目标: 使用ListFragment显示列表 fragment之间传递数据 使用ViewPager来实现划屏显示 对话框 使用ListFragment显示列表 如果是挑战,或者没有UI我会给出草图之类的UI.或手画或Axure原型.每次例子本书都给出了最终UI,所以这步基本都可以省

Hadoop权威指南读书笔记

本书中提到的Hadoop项目简述 Common:一组分布式文件系统和通用I/O的组件与接口(序列化.javaRPC和持久化数据结构). Avro:一种支持高效.跨语言的RPC以及永久存储数据的序列化系统. MapReduce:分布式数据处理模型和执行环境,运行于大型商业集群. HDFS:分布式文件系统,运行于大型商用机集群. Pig:一种数据流语言和运行环境,用以检索非常大的数据集.Pig运行在MapReduce和HDFS的集群上. Hive:一个分布式.按列存储的数据仓库.Hive管理HDFS

IDA.Pro权威指南 读书笔记

http://www.pediy.com/kssd/pediy12/142766.html 标 题:IDA.Pro权威指南 读书笔记[Made By C_lemon] 作 者:Dstlemoner 时 间:2011-11-14 11:56:17 链 接:http://bbs.pediy.com/showthread.php?t=142766    IDA为反汇编 和逆向破解的 静态分析利器 ! 虽然是利器,但是你不会用的话~那就另当别论了. →     唉.对于刚入门的新手来说,看前人走过的路程

Android编程权威指南

Code download: www.bignerdranch.com/solutions/AndroidProgramming.zip Android编程权威指南,布布扣,bubuko.com

电子书 Android编程权威指南 第2版.pdf

Big Nerd Ranch是美国一家专业的移动开发技术培训机构.本书主要以其Android训练营教学课程为基础,融合了几位作者多年的心得体会,是一本完全面向实战的Android编程指南.全书共34章,详细介绍了8个Android 应用.通过这些精心设计的应用,读者可掌握很多重要的理论知识和开发技巧,获得前沿的开发经验. 如果你熟悉Java语言,或者了解面向对象编程,那就立刻开始Android编程之旅吧!作者简介Bill PhillipsBig Nerd Ranch骨灰级讲师.他在Big Ner