简介
简单介绍:
好久没和大家分享文章了,今天和大家分享一下MVVM框架的简单使用,以前都是用的MVP模式写的代码,刚接触MVVM有点晕,其实用的一段感觉挺好用的,最实用的我感觉就是不用我们去找控件的ID,也解决了我们程序员最为烦恼的命名问题,我们XML直接针对的是Bean对象所以控件就不用给ID直接可以调用。别的不多说了直接上代码。
RexecyclerView列表代码展示
步骤一 首先我们先导入依赖在APP的build.gradle里面添加以下依赖 dataBinding { enabled = true }
定义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"
>
<LinearLayout
style ="@style/all_layout"
>
<android.support.v7.widget.RecyclerView
android:id ="@+id/findHrecycler"
android:layout_width ="match_parent"
android:layout_height ="match_parent" >
</android.support.v7.widget.RecyclerView >
</LinearLayout >
</layout >
讲解 我们可以看出上面我们在定义XML里面就和我们以往写的不一样,他是最外层包了一个标签我们通过这个标签就可以去在view层(Activity、fragment)里面调用dataBindingUtil来指定布局并且返回当前主页面的布局,在通过他就可以找到控件;然后我们看下bean对象。
public class FindBean {
private String name;
private String tuurl;
public FindBean (String name, String tuurl) {
this .name = name;
this .tuurl = tuurl;
}
public FindBean () {
super();
}
public void setName (String name) {
this .name = name;
}
public void setTuurl (String tuurl) {
this .tuurl = tuurl;
}
public String getName () {
return name;
}
public String getTuurl () {
return tuurl;
}
}
简单的bean对象和我们以前写的一样 我们在看下适配器
public class FindAdapter extends RecyclerView.Adapter<BindingViewHolder>{
private Context mContext;
private OnItemClickListener mOnItemClickListener;
private LayoutInflater mLayoutInflater;
private List<FindBean> mBeanList;
public interface OnItemClickListener{
void OnMyBeanClick(FindBean findBean);
}
public FindAdapter (Context context) {
mContext = context;
mLayoutInflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mBeanList=new ArrayList<>();
}
@Override
public BindingViewHolder onCreateViewHolder (ViewGroup parent, int viewType) {
ViewDataBinding binding= DataBindingUtil.inflate(mLayoutInflater,
R.layout.item_find,parent,false );
return new BindingViewHolder(binding);
}
@Override
public void onBindViewHolder (BindingViewHolder holder, int position) {
final FindBean findBean = mBeanList.get (position);
holder.getBinding().setVariable(BR.bean,findBean);
holder.getBinding().executePendingBindings();
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick (View v) {
if (mOnItemClickListener != null ) {
mOnItemClickListener.OnMyBeanClick(findBean);
}
}
});
}
@Override
public int getItemCount () {
return mBeanList.size();
}
public void setonListener (OnItemClickListener listener){
mOnItemClickListener=listener;
}
public void addAll (List<FindBean> finbean){
mBeanList.addAll(finbean);
}
}
public class BindingViewHolder <T extends ViewDataBinding > extends RecyclerView .ViewHolder {
private T mbinding;
public BindingViewHolder(T binding) {
super (binding.getRoot());
mbinding=binding;
}
public T getBinding(){
return mbinding;
}
}
public class FindFragment extends BaseFragment {
FragmentFindBinding mBinding;
private List<FindBean> mList = new ArrayList<>();
private FindAdapter mFindAdapter;
@Override
protected ViewDataBinding onCreateContentDataBinding (LayoutInflater layoutInflater, ViewGroup viewGroup, Bundle bundle) {
return mBinding= DataBindingUtil.inflate(layoutInflater, R.layout.fragment_find,viewGroup,false );
}
@Override
protected void initComponents (View createView, Bundle savedInstanceState) {
super .initComponents(createView, savedInstanceState);
mBinding.findHrecycler.setLayoutManager(new LinearLayoutManager(getActivity()));
mFindAdapter = new FindAdapter(getActivity());
mBinding.findHrecycler.setAdapter(mFindAdapter);
mFindAdapter.setonListener(new FindAdapter.OnItemClickListener() {
@Override
public void OnMyBeanClick (FindBean findBean) {
Toast.makeText(getActivity(),"" +findBean.getName(),Toast.LENGTH_SHORT).show();
}
});
initdate();
}
private void initdate () {
mList.add(new FindBean("测试数据" ,"" ));
mList.add(new FindBean("测试数据" ,"" ));
mList.add(new FindBean("测试数据" ,"" ));
mList.add(new FindBean("测试数据" ,"" ));
mFindAdapter.addAll(mList);
}
}
Item的布局 细心的朋友可以看到我的textview是没有给他设置ID的但是我在数据显示的时候就通过findbean类就可以给textview进行赋值。
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:android ="http://schemas.android.com/apk/res/android"
>
<data >
<variable
name ="bean"
type ="com.aioas.jieqianbao.find.bean.FindBean" />
</data >
<com.zhy.autolayout.AutoLinearLayout
android:layout_width ="match_parent"
android:background ="@drawable/shadow_bg"
android:orientation ="vertical"
android:layout_height ="wrap_content" >
<ImageView
android:id ="@+id/img_find"
android:background ="@drawable/guide_3"
android:layout_width ="match_parent"
android:layout_height ="245px" />
<com.zhy.autolayout.AutoLinearLayout
android:layout_marginTop ="30px"
android:layout_marginBottom ="30px"
android:layout_width ="match_parent"
android:layout_height ="wrap_content" >
<TextView
android:paddingLeft ="30px"
android:textSize ="30px"
android:textColor ="@color/text_san"
android:text ="@{bean.name}"
android:layout_width ="wrap_content"
android:layout_height ="wrap_content" />
</com.zhy.autolayout.AutoLinearLayout >
</com.zhy.autolayout.AutoLinearLayout >
</layout >
总结 相信大家看了我的帖子会有点蒙,就是我们适配器里面就指定好对应的layout即可,然后我们Item里面控件是通过标签下面的 标签下面标签指定好的bean类的路径直接交互。就可以实现简单的数据展示。