最火开源框架MVVMhabit
一. 准备工作
二. 快速上手
三. 数据绑定
四. 其他
所有文件
RecyclerActivity.java
layout_recycler_view.xml 布局
RecyclerViewModel.java 数据item_recycler.xml.java 布局
RecyclerItemViewModel.java 数据RecyclerItemBean.java //基本bean
1、开始创建recyclerView页面
创建activity RecyclerActivity.java
public class RecyclerActivity extends BaseActivity<LayoutRecyclerViewBinding, RecyclerViewModel> {
@Override
public int initContentView(Bundle savedInstanceState) {
return R.layout.layout_recycler_view;
}
@Override
public int initVariableId() {
return BR.viewModel;
}
}
注意:LayoutRecyclerViewBinding创建layout_recycler_view后框架自动生成
在 RecyclerActivity 中所有设置过id的标签都可以通过 binding.{id} 来获取进行操作,例如:binding.recyclerView
创建 layout_recycler_view.xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:binding="http://schemas.android.com/apk/res-auto">
<data>
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
</layout>
创建viewModel RecyclerViewModel.java
public class RecyclerViewModel extends BaseViewModel {
public RecyclerViewModel(@NonNull Application application) {
super(application);
}
}
RecyclerViewModel.java中绑定list,绑定item的布局item_recycler.xml
//给RecyclerView添加ObservableList
public ObservableList<RecyclerItemViewModel> observableList = new ObservableArrayList<>();
//给RecyclerView添加ItemBinding
public ItemBinding<RecyclerItemViewModel> itemBinding = ItemBinding.of(BR.viewModel, R.layout.item_recycler);
layout_recycler_view.xml 关联 list 和 item
<variable name="viewModel" type="com.makuan.template.ui.recycler.RecyclerViewModel" />
<variable name="adapter" type="me.tatarka.bindingcollectionadapter2.BindingRecyclerViewAdapter" />
<RecyclerView>绑定数据
binding:adapter="@{adapter}" //adapter
binding:itemBinding="@{viewModel.itemBinding}" //绑定item布局
binding:items="@{viewModel.observableList}" //绑定list
还需要绑定布局管理器,否则控件显示空白
需要先引用
<import type="me.tatarka.bindingcollectionadapter2.LayoutManagers" />
绑定布局管理器
binding:layoutManager="@{LayoutManagers.linear()}"
其他布局管理器
//单列
LayoutManagers.linear() // 默认垂直
LayoutManagers.linear(0,false) //参数1:0水平 1垂直;参数2:true数据倒序,false数据顺序//多列
LayoutManagers.grid(2) //两列瀑布流
LayoutManagers.grid(2,0,true) //参数1:列数;参数2:0水平 1垂直;参数3:true数据倒序,false数据顺序//交错式瀑布流
LayoutManagers.staggeredGrid(2,1) //参数1:列数;参数2:0水平 1垂直;
创建bean,set get方法和构造函数
public class RecyclerItemBean {
public String title;
public String value;
public RecyclerItemBean(String title, String value) {
this.title = title;
this.value = value;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
2、开始创建子item页面
创建item布局 item_recycler.xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<data>
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:orientation="horizontal">
<TextView
android:padding="5dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:text="title" />
<TextView
android:padding="5dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
</layout>
创建子 viewModel RecyclerItemViewModel.java
public class RecyclerItemViewModel extends ItemViewModel<RecyclerViewModel> {
public ObservableField<RecyclerItemBean> itemData = new ObservableField<>();
public RecyclerItemViewModel(@NonNull RecyclerViewModel viewModel, RecyclerItemBean data) {
super(viewModel);
}
}
绑定 item_recycler.xml 和 RecyclerItemViewModel.java
item_recycler.xml data标签中关联ViewModel
<variable
name="viewModel"
type="com.makuan.template.ui.recycler.RecyclerItemViewModel" />
RecyclerItemViewModel.java 数据绑定
public ObservableField<RecyclerItemBean> itemData = new ObservableField<>();
绑定后,还需要在public RecyclerItemViewModel 中把数据 set 给绑定的 itemData,
//写在super(viewModel);下面
this.itemData.set(data);
这样我们就可以在item_recycler.xml布局中肆无忌惮的把itemData的数据绑定给TextView标签了
android:text="@={viewModel.itemData.title}"
android:text="@={viewModel.itemData.value}"
以上已经创建并绑定完成,下面来测试代码吧,在RecyclerViewModel中测试代码
public class RecyclerViewModel extends BaseViewModel {
//给RecyclerView添加ObservableList
public ObservableList<RecyclerItemViewModel> observableList = new ObservableArrayList<>();
//给RecyclerView添加ItemBinding
public ItemBinding<RecyclerItemViewModel> itemBinding = ItemBinding.of(BR.viewModel, R.layout.item_recycler);
public RecyclerViewModel(@NonNull Application application) {
super(application);
//创建数组数据
List<RecyclerItemBean> itemBeans = new ArrayList<>();
itemBeans.add(new RecyclerItemBean("你好","1"));
itemBeans.add(new RecyclerItemBean("再见","2"));
itemBeans.add(new RecyclerItemBean("成功","3"));
//循环给list添加item数据
for(RecyclerItemBean item : itemBeans){
RecyclerItemViewModel itemViewModel = new RecyclerItemViewModel(this, item);
//双向绑定动态添加Item
observableList.add(itemViewModel);
}
}
}
网友评论