• 《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

  • 相关阅读:
    Excel表导入数据库时带小数点的数据会变成科学计数样式的解决方法
    C# 具有合计行的DataGridViewNiceDataGridView1.0
    nginx 【使用echo调试】【地址复写】
    ts 【申明文件】
    createreactapp 【引入ui框架样式,全局样式被处理成模块化样式处理方法】
    node 【node服务器搭建1:安转node 和pm2】
    http 【前后端缓存】【nginx配合缓存】
    nginx 【匹配规则】【开启gzip压缩】
    nginx【nginx配置】
    react 【useMome、useCallback原理详解】
  • 原文地址:https://www.cnblogs.com/canglin/p/4335263.html
Copyright © 2020-2023  润新知