MVP学习:
MVP基本框架
进行改进
上面的是图片是上面MVP学习的框架。model负责进行底层数据库的链接以及相关底层逻辑功能的完善,view负责进行Android页面的展示,包括的内容除了activity之外还有fragment。而presenter翻译过来是主持人的意思,在MVP中主要负责的内容是进行Model和View的连接,进行相应的解耦操作。
在对MVP框架进行优化的过程中,会将基本的功能进行抽取,存放在base中,进行部分逻辑的简化,方便之后进行维护。
再次进行优化
MVP架构中有个Contract的概念,Contract有统一管理接口的作用,目的是为了统一管理一个页面的View和Presenter接口,用Contract可以减少部分文件的创建,比如P层和V层的接口文件.
上方的MVP文章尽可能的进行了细致的讲解,尤其是对MVP框架如何进行优化以及如何进行优化。十分具有参考意义。
ButterKnife框架
对一个成员变量使用@BindView注解,并传入一个View ID, ButterKnife 就能够帮你找到对应的View,并自动的进行转换(将View转换为特定的子类)
class ExampleActivity extends Activity {
@BindView(R.id.title) TextView title;
@BindView(R.id.subtitle) TextView subtitle;
@BindView(R.id.footer) TextView footer;
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.simple_activity);
***ButterKnife***.bind(this);
// TODO Use fields...
}
}
资源绑定
绑定资源到类成员上可以使用@BindBool、@BindColor、@BindDimen、@BindDrawable、@BindInt、@BindString。使用时对应的注解需要传入对应的id资源,例如@BindString你需要传入R.string.id_string的字符串的资源id。
class ExampleActivity extends Activity {
@BindString(R.string.title) String title;
@BindDrawable(R.drawable.graphic) Drawable graphic;
@BindColor(R.color.red) int red; // int or ColorStateList field
@BindDimen(R.dimen.spacer) Float spacer; // int (for pixel size) or float (for exact value) field
// ...
}
View列表
可以一次性的将多个views绑定到一个list数组之中,ButterKnife.apply(nameViews,DISABLE);apply函数用于一次性在列表上的所有View执行一个动作,Action和Setter接口可以实现一些简单的动作。
static final ButterKnife.Action<View> DISABLE = new ButterKnife.Action<View>() {
@Override public void apply(View view, int index) {
view.setEnabled(false);
}
};
static final ButterKnife.Setter<View, Boolean> ENABLED = new ButterKnife.Setter<View, Boolean>() {
@Override public void set(View view, Boolean value, int index) {
view.setEnabled(value);
}
};
感觉BUtterKnife专注于组件的绑定,但凡涉及到组件绑定的内容都可以考虑使用他,功能包括基本的资源的绑定,button的绑定,View列表的绑定,进行监听器的绑定,直接将监听器绑定到特定的执行方法上。
同时由于Fragment和Activity的生命周期不同,导致存在需要销毁View的时候,可以返回一个unbinder实例的unbind()方法来进行绑定的重置。
如果需要绑定的View暂时并没有找到的情况可以变量上使用@Nullable注解来进行绑定,或者方法上使用@Option来注解,此时就不会报错。