Android开发中MVC模式的使用

一、概念
MVC(Model-View-Controller):M是指模型,V是指视图,C则是控制器。一个模型可以对于多种视图,比如一批图片数据,可以分别用列表视图、网格视图来展示。一种视图也可以对于多种模型,如一个数据列表,其数据可以是由本地数据库或者网络通过不同的逻辑模型来获得。使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。
二、Android开发中的MVC
视图是用户看到并与之交互的界面。在android应用开发当中,也就是View。在开发的过程中,我们一般采用xml进行描述,然后在使用时引入。在界面控件较多的情况下,可以将多个控件封装在一个自定view或者layout里以方便操作显示。
模型是数据和业务逻辑的封装。对数据库的操作、联网数据获取、业务计算等操作应该放在的该层。
控制器接受用户的输入并调用模型和视图去完成用户的需求。控制器本身不输出任何东西和做任何处理,它只是接收请求并决定调用哪个模型去处理请求,然后再确定用哪个视图来显示该模型返回的数据。Android的控制层通常由Acitvity来担当,因此使用MVC模式来开发应用时,Activity的业务逻辑代码应交割Model层处理,同时Acitivity的响应时间是5s,一些耗时的操作也不能放在Activity当中。
三、Android开发中MVC的应用
在android应用开发中,使用MVC可以很好的将界面显示与数据逻辑处理分开。其中对于MVC三层的功能职责划分可以按以下方式:
View层:只负责界面显示和更新;
Model层:封装数据库读取保存、联网数据获取、文件复制保存等操作,只负责数据处理;
Controller层:监听View层里用户输入(onClick、onTouch等)或者自定义的用户交互事件(如下拉刷新等),在监听到View层相应的事件时,就调用对应的Model进行数据处理,同时也根据需要(数据处理耗时的情况)对该Model进行监听,在监听到该Model数据处理完成后,就将获取的数据交给view层去更新。
 
例如:一个界面需要从网上下载数据来初始化,加载失败后有一个按钮点击能重新加载,加载成功后界面正常显示。即界面含有三种状态,如下图所示:
 
对于这种情况,我们可以将其封装成一个自定义view,如下所示
其中setOnLoading、setLoadedError、setLoadedSuccess则用于Controller来控制界面内容的显示和更新,其中参数btnClkLsn则为Controller对重新加载按钮的点击监听,参数data即为Controller从Model层获得的数据
对应的Model如下图所示:
Controller为
此例中controller为主Activity,若一个activity包含多个复杂的自定义view,可以为这每个view分别设置controller和model,然后由这个activity来管理。若界面元素比较简单,可以不用封装自定义view抽离出Activity,只将Model层分离出即可。
四、封装自定义view减少层级的方法
对于封装自定义view时减少布局层级,一种方法是对inflate的布局文件使用merge标签。如下图所示
 
其中content_view布局文件为:
另外一种方法,可以不用inflate布局文件,在需要用到的地方将其连同子view列出,并且在重载的onFinishInflate()对子view进行初始化即可。如下图所示
在重载的onFinishInflate()中初始化子view
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值