基于Google MVVM框架的baseMVVM框架

栏目: IOS · Android · 发布时间: 5年前

内容简介:本人在项目中的一些总结和参考大佬的代码,综合了一个小型的Android vvm框架1.加入retrofit2 RxJava 2.使用GoogleArch大礼包,包含 LiveData ,ViewModel,LifeCycle 3.提供 DataBinding 自定义绑定事件(TextView,ImageView,) 4.集成张旭童的一行代码实现RecyclerView简书链接 5.基于RxJava的 RxBus,RxUtils继承Commonlib下的BaseActivity,并传入DataBinding生

本人在项目中的一些总结和参考大佬的代码,综合了一个小型的Android vvm框架 本框架适用于中小项目,并且对DataBinging有一定的了解。mvvm模式对数据展示累项目的开发十分友好。项目大或者页面逻辑复杂的项目请绕行MVP 项目地址: gitHub地址 https://github.com/dingdaidao/baseMVVM

主要特性:

1.加入retrofit2 RxJava 2.使用GoogleArch大礼包,包含 LiveData ,ViewModel,LifeCycle 3.提供 DataBinding 自定义绑定事件(TextView,ImageView,) 4.集成张旭童的一行代码实现RecyclerView简书链接 5.基于RxJava的 RxBus,RxUtils

如何使用:

1.activity,xml,和viewModel该怎么写

继承Commonlib下的BaseActivity,并传入DataBinding生成的xml对应的ViewDataBing类和该页面的ViewModel类

public class MainActivity extends BaseActivity<ActivityMainBinding, MainViewModel> {
复制代码

注意ActivityMainBinding该类是根据activity_main.xml的命名来生成的。我们先来看下activity_main.xml文件

<!--跟布局用layout包裹-->
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">
    <!--声明xml对应的ViewModel类-->
    <data>

        <variable
            name="mainVM"
            type="com.example.ding.vm.MainViewModel" />
    </data>
    <!--rootview-->
    <android.support.constraint.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
        <EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{mainVM.weatherLiveData}"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    </android.support.constraint.ConstraintLayout>
</layout>
复制代码
@Override
   protected void dealWithAction(Event event) {
      //处理rxbus订阅的信息
   }
复制代码
@Override
   public int initContentView() {
      return R.layout.activity_main;
   }
@Override
   public int initVariableId() {
      return BR.mainVM;
   }
复制代码

initContentView方法是为了获取该页面的xml,intiVariableId是获取xml对应绑定的ViewModel(MainViewMode)的id

@Override
   public MainViewModel initViewModel() {
      return new MainViewModel();
   }
复制代码

initViewModel是为了获取对应viewModel的实例

@Override
    public void initViewObservable() {

    }
复制代码

initViewObservable是为了初始化viewModel层产生数据变化时的监听事件,比如viewModel中一个天气情况的数据weatherLiveData产生了变化,则weatherLiveData.observe(this,(params){ //处理数据变化 });一般来说我们会把数据通过dataBinding直接塞给xml,View层,但也不排除其他复杂一点的操作,在xml中无法处理。所以,可以在initViewObservable中初始化LiveData的监听事件。我们再来看下ViewModel类

public class MainViewModel extends BaseViewModel {
    private MutableLiveData<String> weatherLiveData = new MutableLiveData<>();

    @Override
    public void onCreate() {
        super.onCreate();
        //页面初始化的一些操作
    }

    public MutableLiveData<String> getWeatherLiveData() {
        return weatherLiveData;
    }
    /**
     * 可不写此方法
     * 使用getShowTxt.setValue(String weatherLiveData)
     *
     * @param weatherLiveData
     */
    public void setWeatherLiveData(String weatherLiveData) {
        this.weatherLiveData.setValue(weatherLiveData);
    }
}
复制代码

在ViewModel类中定义的weatherLiveData属性是继承自LiveData,这是LiveData的介绍 Android Developer LiveData 。LiveData可以个DataBinding连用,实现双向绑定,数据驱动模型。在view层中绑定LiveData,在LiveData中的数据产生变化时,LiveData通过Observe通知到DataBinding绑定的控件,更新显示数据。或者,view产生变化的时候,view绑定的LiveData也会更着页面更新。

2.RecycleView的实现

recyclerView的实现参考了张旭童大神的方法,上链接简书链接先看下item中xml的实现:

<data>
        <variable
            name="data"
            type="String" />
    </data>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{data}" />
    </LinearLayout>
复制代码

定义传入数据的类型String和对应name data(此为固定,因为已经在item.xml中定义了通用id:data,这样在代码中配置adapter的时候就不用传该item的variableId了)。

BaseBindingAdapter mAdapter=new BaseBindingAdapter(this,R.layout.main_item);
        mBinding.r.setAdapter(mAdapter);
复制代码
mBinding.r.setAdapter(new BaseBindingAdapter(this,mListData,R.layout.main_item));
复制代码

一两行代码即可配置好RecyclerView的适配器,是不是爽歪歪啊。如果仅仅是普通的展示和点击满足不了你记得需求,你还可以重写onBindViewHolder方法。

mAdapter=new BaseBindingAdapter(this,R.layout.main_item){
            //可复写
            @Override
            public void onBindViewHolder(BaseBindingVH holder, int position) {
                super.onBindViewHolder(holder, position);//复写是不可删除
            }
        };
复制代码

在这里你可以根据position对数据或者view做出相应的处理。对于多布局的RecyclerView可以使用BaseMulTypeBindingAdapter类去实现,我就不过多解释了。

最后,这是我的第一篇博客,求轻喷。后续我会继续完善这个项目,并继续更新文章分析Google Architecture Compontents组件库和DataBinding的控件绑定用法。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

新媒体文案创作与传播

新媒体文案创作与传播

秋叶、叶小鱼、勾俊伟 / 人民邮电出版社 / 2017-4 / 39.80元

《新媒体文案创作与传播》共分三篇。第1篇是新媒体文案基础篇,主要讲述了新媒体文案的基本概念、新媒体文案的岗位要求和职业能力素养;第二篇是新媒体文案创意实务篇,主要讲述了新媒体文案的创作思路、新媒体文案的写作技巧、爆款新媒体文案的打造、新媒体销售文案的写作、新媒体对文案传播的新要求、新媒体品-牌文案的写作,以及不同媒介的特征及发布形式;第三篇为新媒体文案相关技能补充,主要讲述的是策划能力。 《新媒体......一起来看看 《新媒体文案创作与传播》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具