MVVM的简单使用流程

简介

  • 描述使用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类的路径直接交互。就可以实现简单的数据展示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值