码迷,mamicode.com
首页 > 移动开发 > 详细

Android项目开发---- GeoQuiz

时间:2017-09-17 15:18:08      阅读:252      评论:0      收藏:0      [点我收藏+]

标签:oncreate   line   用户输入   水平   设计   系统调用   start   系统   activity栈   

 GeoQuiz项目总结:

  • 前言

本项目为这学期开发的第一个应用,通过此项目我们能学习到一些Android基本概念以及构成应用的UI组件。此篇博客也是我学习编程以来第一次正式完成的第一篇博客,仍是十分浅显与生涩。

  • 开发环境

本项目采用了AndroidStudio为开发环境。

首先我们需要在androidstudio中创建本项目,项目名称为GeoQuiz。

  • 先在AndroidStudio中Start a new Android Studio project

技术分享

  • 项目名称为GeoQuiz

技术分享

  • 选择一个空页面

技术分享

  • 之后继续NEXT然后选择Finish,一个空的项目包变好了。

 

  • 本项目一共需要如下目录

技术分享

 

  • 代码的编写

首先我们需要进行的是用户界面的实现,本项目主要采用了垂直与水平LinearLayout组件,TextView组件和Button组件。在text界面我们可以快速的编写组件代码从而更加效率的完成布局,本项目总共有两个activity,以及三个布局视图包括了可旋转视图,我们可以看到完成后的布局如下:

技术分享

技术分享

技术分享

我们为所有的button控件全都设置了监听器,所有的监听器全部使用了匿名内部类来实现,这样可以相对集中实现监听器方法并且可以不用繁琐的创建命名类,我们可以感受一下实现代码:

  • <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/true_button"/>
  • <resources>
    <string name="app_name">GeoQuiz</string>
    ...
    <string name="true_button">True</string>
    ...
    </resources>
  • <Button
            android:id="@+id/true_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/true_button"/>
  • public class QuizActivity extends AppCompatActivity {
    private Button mTrueButton;
    ...
    }
  • public class QuizActivity extends AppCompatActivity {
    private Button mTrueButton;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_quiz);
    mTrueButton = (Button) findViewById(R.id.true_button);
    }
    }
  • ...
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_quiz);
    mTrueButton = (Button) findViewById(R.id.true_button);
    mTrueButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    // Does nothing yet, but soon!
    }
    });
    mFalseButton = (Button) findViewById(R.id.false_button);
    }
    }

下面的模型图展示了在响应诸如单击按钮等用户事件时,对象间的交互控制数据留。

需要注意的是:模型对象与视图对象不能直接交互。控制器作为他们之间的联系纽带,加收对象发送的消息,然后向其它对象发送操作指令。

技术分享

 

 

 

  • 接下来运用了MVC的设计模式

如图我们可以先简单的了解:

技术分享

 

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范

  • 模型(Model)—— 是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据
  • 视图(View)—— 是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的。
  • 控制器(Controller)—— 是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

使用MVC的优点。

  • 耦合性低 —— 视图层和业务层分离,这样就允许更改视图层代码而不用重新编译模型和控制器代码
  • 重用性高 —— 多个视图能共享一个模型
  • 生命周期成本低 —— MVC使开发和维护用户接口的技术含量降低。

结合代码来更加深入了解:

public class Question {
private int mTextResId;
private boolean mAnswerTrue;

public Question(int textResId, boolean answerTrue){
mTextResId = textResId;
mAnswerTrue = answerTrue;
}

public int getTextResId(){
return mTextResId;
}
public void setTextResId(int textResId){
mTextResId = textResId;
}
public boolean isAnswerTrue(){
return mAnswerTrue;
}
public void setAnswerTrue(boolean answerTrue){
mAnswerTrue = answerTrue;
}
}

 

  • Activity的生命周期

每个安卓都有其生命周期,在生命周期内,activity在运行、暂停、停止和不运行这四种状态中转换。每次状态转换时,都有相应的Activity方法发消息通知activity。下图显示了activity的生命周期、状态以及状态切换时系统调用的方法。

技术分享

Activity是由Activity栈进管理,当来到一个新的Activity后,此Activity将被加入到Activity栈顶,之前的Activity位于此Activity底部。Acitivity一般意义上有四种状态:

  • 1.当Activity位于栈顶时,此时正好处于屏幕最前方,此时处于运行状态;
  • 2.当Activity失去了焦点但仍然对用于可见(如栈顶的Activity是透明的或者栈顶Activity并不是铺满整个手机屏幕),此时处于暂停状态;
  • 3.当Activity被其他Activity完全遮挡,此时此Activity对用户不可见,此时处于停止状态;
  • 4.当Activity由于人为或系统原因(如低内存等)被销毁,此时处于销毁状态;

在每个不同的状态阶段,Adnroid系统对Activity内相应的方法进行了回调。因此,我们在程序中写Activity时,一般都是继承Activity类并重写相应的回调方法。

 

 

Android项目开发---- GeoQuiz

标签:oncreate   line   用户输入   水平   设计   系统调用   start   系统   activity栈   

原文地址:http://www.cnblogs.com/wypboke/p/7533223.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!