刚刚接触编程的的人,可能会这样认为:只要代码写完了能够跑起来就算完工了。如果只是写一个小程序,“能够跑起来”这样的标准也就可以了,但是如果你是在公司进行程序的开发,那么仅仅让程序成功的跑起来是不行的,事情远没有你想的这么简单。一个商业项目的代码少则数万行,多则上百万甚至更多,这种商业项目不可能仅仅靠一个人完成,要想高效高质量的完成开发工作,就需要一个专业的开发团队了。在团队中,有人负责项目的架构设计,有些人负责程序代码的编写….要想像这样做到项目开发的分工就必须在程序的结构上做适当的安排。

  举个例子,大多数商业化软件都有不同的语言版本,这些不同语言版本的软件在功能上是完全一样的,如果我们能够把软件上的文字与程序分离开来,这样就能够很方便的发布不同语言的版本了。

  MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。

  现在,我们在之前的代码基础上,进行一些改动,把MVC模式应用的程序当中。

  1.新增一个setupViewCompoent()方法负责运行View相关的所用程序代码,包括取得接口布局文件中的接口组件和设置接口组件中事件处理程序。

  2.把写在程序中的字符串放在strings.xml资源文件中,定义在strings.xml资源文件中的字符串在经过编译后会放到资源类R中,然后程序再从资源类R中取得所需要的字符          串。

  3.在main.xml接口布局文件中,我们把里面的提示文字定义在strings.xml资源文件中,然后再到资源类R中取出字符串使用。代码如下:

    strings.xml资源文件:

  1.   <resources>
       <string name="app_name">健身咨询</string>
      <string name="promptSex">性别:</string>
       <string name="promptAge">年龄:</string>
       <string name="promptBtnDoSug">健身咨询</string>
      <string name="sugResult">结果:</string>
       <string name="sugRun">跑步</string>
       <string name="sugSwim">游泳</string>
       <string name="sugSuggestion">健康咨询</string>
      <string name="sexMale"></string>
      </resources>
  2.   main.xml文件:
  1.   <?xml version="1.0" encoding="utf-8"?>
      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:orientation="vertical"
      android:layout_width="match_parent"
       android:layout_height="match_parent">
  2.  
  3.   <TextView
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:text="@string/promptSex"/>
    <EditText
       android:id="@+id/edtSex"
       android:layout_width="match_parent"
       android:layout_height="wrap_content" />
       android:text=""/>
    <TextView
       android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:inputType="text"
       android:text="@string/promptAge"/>
    <EditText
      android:id="@+id/edtAge"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:inputType="number"
       android:text=""/>
    <Button
       android:id="@+id/btnDoSug"
      android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:text="@string/promptBtnDoSug"/>
    <TextView
       android:id="@+id/txtResult"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:text="@string/sugResult"/>
    </LinearLayout>
  1. 修改程序代码:
  1.   import android.app.Activity;
      import android.os.Bundle;
      import android.view.View;
      import android.widget.Button;
      import android.widget.EditText;
      import android.widget.TextView;
  2.  
  3.   public class MainActivity extends Activity {
  4.  
  5.    private Button btnDoSug;
       private EditText edtSex, edtAge;
      private TextView txtResult;
  6.  
  7.    @Override
       protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       setupViewComponent();
       }
  8.  
  9.    private void setupViewComponent(){
       //从资源类R中取得接口组件
       btnDoSug = (Button)findViewById(R.id.btnDoSug);
       edtSex = (EditText)findViewById(R.id.edtSex);
      edtAge = (EditText)findViewById(R.id.edtAge);
      txtResult = (TextView)findViewById(R.id.txtResult);
      //button组件事件的listener
       btnDoSug.setOnClickListener(btnDoSugOnClick);
       }
  10.  
  11.    private Button.OnClickListener btnDoSugOnClick = new Button.OnClickListener(){
  12.  
  13.    public void onClick(View view){
       //点击按钮后执行的代码
       String strSex = edtSex.getText().toString();
       int iAge = Integer.parseInt(edtAge.getText().toString());
  14.  
  15.    String strSug = "结果:";
       if(strSex.equals("男"))
       {
       if(iAge < 28)
       strSug += getString(R.string.sugRun);
       else if(iAge > 33)
       strSug += getString(R.string.sugRun);
       else
       strSug += getString(R.string.sugRun);
       }
       else
       {
       if(iAge < 28)
       strSug += getString(R.string.sugRun);
      else if(iAge > 33)
      strSug += getString(R.string.sugSwim);
       else
       strSug += getString(R.string.sugSwim);
       }
  16.  
  17.    txtResult.setText(strSug);
       }
       };
      }
  1.  

    

Android入门(五):程序架构——MVC设计模式在Android中的应用的更多相关文章

  1. .NET 开源了,Visual Studio 开始支持 Android 和 iOS 程序编写并自带 Android 模拟器

    .NET 开源了,Visual Studio 开始支持 Android 和 iOS 程序编写并自带 Android 模拟器 北京时间今天凌晨的 Connect(); 大会上,多少程序员的假想成为现实. ...

  2. MVC设计模式在网站中的应用

    MVC设计模式在网站中的应用 以淘宝的购物车为例 一.结合六个基本质量属性 可修改性 采用MVC设计模式的时候,可以将视图.模型.控制器分析,将用户动作.数据表示.应用数据分离开来,如果用户需要以不同 ...

  3. Android开发之程序猿必需要懂得Android的重要设计理念2(5.20更新版)

    上篇文章介绍了Android开发的设计理念的一部分,并没有得到博友们的多大认可,仅仅看到了一位博友在以下留言期待下一篇文章的发表,为了这小小的唯一支持.我决定继续把后面的8个要点介绍一下,自己也潜心反 ...

  4. Android入门(五)UI-单位与尺寸、ListView

    原文链接:http://www.orlion.ga/453/ 一.单位与尺寸 布局文件中一共有以下单位供选择:px,pt,dp,sp px:是像素,屏幕中可见的最小元素单位. pt:是磅,1磅等于1/ ...

  5. MVC设计模式(持续更新中)

    MVC设计模式--->英文全称为: model(模型)  View (视图)  Controller(控制)   MVC是一种设计思想.这种思想强调实现模型(Model).视图(View)和控制 ...

  6. Android开发之程序猿必需要懂得Android的重要设计理念

         前几天去參加了带着自己的作品去參加服务外包大赛,由于签位抽到的比較靠后就等待了蛮久,就跟坐在前面的一起參赛的选手開始讨论Android的开发经验.各自给对方展示了自己的作品,小伙伴就建议我看 ...

  7. 前端之Android入门(3):MVC模式(上)

    很多Android的入门书籍,在前面介绍完布局后就会逐个介绍组件,然后开始编写组件使用的例子.每每到此时小伙伴们都可能会有些疑问:是否应该先啃完一本<Java编程思想>学点 Java 知识 ...

  8. Android入门学习:Android 系统框架及应用程序执行过程

    Android基础知识学习 新手上路,还请多多帮助.由于初学,博客内容难免有不正确的地方,还请各位多多指教,相互学习! 主要内容: 1.Android层次架构及主要功能 2.Android编程模型,程 ...

  9. 传智播客JavaWeb day07、day08-自定义标签(传统标签和简单标签)、mvc设计模式、用户注册登录注销

    第七天的课程主要是讲了自定义标签.简单介绍了mvc设计模式.然后做了案例 1. 自定义标签 1.1 为什么要有自定义标签 前面所说的EL.JSTL等技术都是为了提高jsp的可读性.可维护性.方便性而取 ...

随机推荐

  1. 网络抓包wireshark

    抓包应该是每个技术人员掌握的基础知识,无论是技术支持运维人员或者是研发,多少都会遇到要抓包的情况,用过的抓包工具有fiddle.wireshark,作为一个不是经常要抓包的人员,学会用Wireshar ...

  2. [java] 可视化日历的实现(基于Calendar类 )

    写在前面 博文安排顺序如下 1.写在前面 2.源码 3.思路 4.相关知识 该小程序是对Date类及其相关类的复习 要求如下图:实现可视化日历 实现思路 1.先从键盘输入指定格式的字符串(str)2. ...

  3. FMDB线程安全

    //打开数据库 如果没有就创建    NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUse ...

  4. $_SERVER 的用法

    PHP编程中经常需要用到一些服务器的一些资料,特把$_SERVER的详细参数整理下,方便以后使用. $_SERVER['PHP_SELF'] #当前正在执行脚本的文件名,与 document root ...

  5. CPU的内部架构和工作原理 (转,相当不错)

    http://blog.chinaunix.net/uid-23069658-id-3563960.html 一直以来,总以为CPU内部真是如当年学习<计算机组成原理>时书上所介绍的那样, ...

  6. OpenVPN使用用户名/密码验证方式

    OpenVPN推荐使用证书进行认证,安全性很高,但是配置起来很麻烦.还好它也能像pptp等vpn一样使用用户名/密码进行认证. 不管何种认证方式,服务端的ca.crt, server.crt, ser ...

  7. .net错误日志记录(log4)

    Log4 web.config <!--这段放前面--> <configSections> <section name="log4net" type= ...

  8. php换行符

    1.需求 统一php换行符 2.实践 使用PHP_EOL替换换行符,保证平台的兼容性. 类似的有DIRECTORY_SEPARATOR 参考文档:http://www.cnblogs.com/code ...

  9. jquery手写实现单页滚动导航

    效果说明:点击tab导航,页面滑动到下方相应板块.并且当页面通过鼠标滚动下去时,上方的tab也可以自动切换到当前位置的板块上. 代码说明:js中对两个动作分别写,一个是tab点击下滑到相应板块位置:一 ...

  10. java21

    1:字符流(掌握) (1)字节流操作中文数据不是特别的方便,所以就出现了转换流. 转换流的作用就是把字节流转换字符流来使用. (2)转换流其实是一个字符流 字符流 = 字节流 + 编码表 (3)编码表 ...