MVVM的简单使用流程

来源:互联网 发布:usb转网络接口装驱动 编辑:程序博客网 时间:2024/05/22 13:59

简介

  • 描述使用MVVM
  • 简单使用
  • 代码展示
  • 总结

简单介绍:

好久没和大家分享文章了,今天和大家分享一下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);        }}
  • 还有一个viewholder
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类的路径直接交互。就可以实现简单的数据展示。
原创粉丝点击