美文网首页
Android MVVM设计模式(RecyclerView)

Android MVVM设计模式(RecyclerView)

作者: JYangkai | 来源:发表于2019-03-25 21:48 被阅读0次

正文

今天我来学习如何在RecyclerView中使用DataBinding

一般我们的RecyclerView是用来显示各种列表的,但是和Activity或Fragment一样,里面有很多findViewById和逻辑代码,我们要减少这种代码,那么就可以使用DataBinding,下面我们将演示如何在RecyclerView中使用DataBinding

新建一个实体类

User.java

package com.yk.jchat.test;

public class User {
    
    private String username;
    
    private int age;
    
    private boolean sex;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public boolean isSex() {
        return sex;
    }

    public void setSex(boolean sex) {
        this.sex = sex;
    }
}

新建布局

item_user.xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <data>

        <variable
            name="user"
            type="com.yk.jchat.model.model.User"/>

    </data>
    
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="center_vertical"
        android:padding="@dimen/dimen_frame_normal">

        <TextView
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:layout_marginLeft="@dimen/dimen_margin_16dp"
            android:ellipsize="end"
            android:maxLines="1"
            android:text="@{user.username}"
            android:textColor="@color/color_text_normal_black"
            android:textSize="@dimen/dimen_text_subhead_size" />
        
    </LinearLayout>

</layout>

对应的布局item_user.xml你可以自己定义,需要注意的一点是你定义的布局可以不给控件加id属性,因为我们这里没用到(为什么不用id,待会你就知道了)

新建适配器

UserAdapter.java

package com.yk.jchat.adapter;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.ViewGroup;

import com.yk.jchat.R;
import com.yk.jchat.databinding.ItemContactsBinding;
import com.yk.jchat.model.model.User;

import java.util.List;

import androidx.annotation.NonNull;
import androidx.databinding.DataBindingUtil;
import androidx.recyclerview.widget.RecyclerView;

public class UserAdapter extends RecyclerView.Adapter<UserAdapter.ViewHolder> {

    private List<User> mList;

    public UserAdapter(List<User> list) {
        mList=list;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        LayoutInflater inflater = (LayoutInflater)parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        ItemContactsBinding binding = DataBindingUtil.inflate(inflater, R.layout.item_contacts,parent,false);
        return new ViewHolder(binding);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        User user = mList.get(position);
        holder.getBinding().setContacts(user);
    }

    @Override
    public int getItemCount() {
        return mList.size();
    }

    class ViewHolder extends RecyclerView.ViewHolder {

        private ItemContactsBinding binding;

        public ViewHolder(ItemContactsBinding binding) {
            super(binding.getRoot());
            this.binding = binding;
        }

        public ItemContactsBinding getBinding(){
            return binding;
        }

    }

}

可以发现,在我们的适配器中没有findViewbyId方法,也没有太多的逻辑

这样,我们的就可以在Activity或Fragment中使用RecyclerView了,是不是很简单啊。好了,今天就到这里。

相关文章

网友评论

      本文标题:Android MVVM设计模式(RecyclerView)

      本文链接:https://www.haomeiwen.com/subject/wbdivqtx.html