Android系统中提供给我们的View控件基本上能满足我们的基本应用的需求,但有时因为一些特殊的需求,我们不得不自己创建符合我们要求的View.所以学会自定义View控件还是很有必要的.
自定义View的基本步骤
- 创建View
- 处理View布局
- 进行View的绘制
- 处理View的事件监听
- 优化View
上面的步骤就是创建自定义View的一些基本的步骤了.下面是各个步骤的详细介绍.
上次我们完成了界面的展现,这次我们把数据绑定到界面上,然后把整个项目都完善好.想查看完整的代码可以到这里
MovieContract.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20/**
* 用于管理loadMovie功能模块的View与Presenter
*/
public class MovieContract {
/**
* loadMovie模块的View,提供对外的UI更新接口
*/
interface View extends BaseView<Presenter>{
void loadMore(ArrayList<Movie> movie);//上拉加载更多
void refresh(ArrayList<Movie> movie);//下拉刷新
void loadCompleted();//改变上拉加载状态
}
/**
* loadMovie模块的Presenter,负责获取数据并处理,更新UI
*/
interface Presenter extends BasePresenter{
void refresh();//刷新
void loadMore(int start);//加载更多
}
}
上一次我们将MVP
的基本架构都搭建起来了,这次我们先来完成UI界面的部分.
我们的项目界面是采用RecyclerView
作为列表的控件,所以我们需要先将布局文件设计好.
1 | <?xml version="1.0" encoding="utf-8"?> |
我们这次使用的是Fragment
作为我们的View模块,所以我们也定义好Fragment
的布局文件
ButterKnife
是一个Android的开源工具,是一个View的注入工具.他可以极大的简化我们的代码,帮我们省略大量的findViewById()
和setOnClickListener()
.而且它的使用非常简单.
ButterKnife
是通过注解来完成对View对象的绑定,若对Java注解不了解,可以看一下我写的一篇博客:Java学习笔记—Annotation
ButterKnife
我们需要在我们项目的app/build.gradle
文件中添加依赖:1 | apply plugin: 'android-apt' |
在dependencies
节点下添加1
2compile 'com.jakewharton:butterknife:8.0.1'
apt 'com.jakewharton:butterknife-compiler:8.0.1'
最后在项目根目录的build.gradle
文件的dependencies
节点下添加1
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
MVP
(Model-View-Presenter)软件设计架构在Android开发中能够帮助我们将业务逻辑和视图展现解耦,便于代码的维护,达到模块化.这个系列我会带大家完成一个完整的MVP
架构的应用,希望大家通过这个系列能到MVP
架构有个基本的了解.
在我们编码开发时,我们将系统分为数据模型(Model
),视图(View
),和一个”中间人”(Presenter
)三个部分.其中Presenter
作为一个”中间人”,它从Model
中获取数据,将数据进行相应的处理后将数据交给View
进行展示.这样一来,View
只需展现数据给用户看,其它的事情它就不用管了,而Model
只需完成数据的请求处理,其它的事情它也不用管,Presenter
则负责从Model
获取数据,通知View
进行数据更新.
首先我们先了解一下各个模块的具体职责:
Presenter
可以访问,与View
隔离View
对象,可对View
进行操作Model
提供的数据访问接口View
Presenter
对象Presenter
负责更新UI