天天看點

Android ViewBinding + BaseQuickAdapter結合使用

ViewBinding 和 RecycleView 結合使用,廢話不多說,直接上代碼

首先本人使用的是 第三方庫 的baseAdapter :

com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.6
           

第一步,我們建立一個BaseViewBindingAdapter 基類

/**
 * @author Create by 17474 on 2021/4/29.
 * Email: [email protected]
 * Describe:使用ViewBinding 封裝
 * 使用泛型 VH 指定類型為 BaseViewHolder
 */
public abstract class BaseViewBindingAdapter<T, VH extends BaseViewHolder> extends BaseQuickAdapter<T, VH> {

    public BaseViewBindingAdapter(int layoutResId, @Nullable List<T> data) {
        super(layoutResId, data);
    }

    public BaseViewBindingAdapter(int layoutResId) {
        super(layoutResId);
    }

    @NotNull
    @Override
    protected VH onCreateDefViewHolder(@NotNull ViewGroup parent, int viewType) {
        return  getViewBinding(viewType,LayoutInflater.from(getContext()),parent);
    }
    protected abstract VH getViewBinding(int viewType, LayoutInflater from, ViewGroup parent);
    
}
           

第二步,我們建立BaseViewBindingHolder

/**
 * @author Create by 17474 on 2021/4/29.
 * Email: [email protected]
 * Describe:
 */
public class BaseViewBindingHolder <VB extends ViewBinding> extends BaseViewHolder {
    public VB viewBind;

    public BaseViewBindingHolder(VB viewBind) {
        super(viewBind.getRoot());
        this.viewBind = viewBind;
    }

    public VB getViewBind() {
        return viewBind;
    }
}
           

第三步 建立一個 adapter_home_post_item_view.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="@dimen/middle_layout_margin_default"
    app:cardBackgroundColor="@color/layout_bg"
    app:cardCornerRadius="@dimen/layout_corner_default"
    app:cardElevation="@dimen/layout_elevation_default">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <de.hdodenhof.circleimageview.CircleImageView
            android:id="@+id/headImg"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_margin="@dimen/min_layout_margin_default"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <TextView
            android:id="@+id/nickName"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:gravity="center_vertical"
            android:textColor="@color/text_title_color"
            android:textSize="@dimen/title_text_default"
            android:paddingEnd="0dp"
            android:paddingStart="@dimen/middle_padding_default"
            app:layout_constraintBottom_toBottomOf="@id/headImg"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@id/headImg"
            app:layout_constraintTop_toTopOf="@id/headImg" />

        <TextView
            android:id="@+id/postContent"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="@dimen/middle_padding_default"
            android:textSize="@dimen/content_text_default"
            app:layout_constraintStart_toStartOf="@id/headImg"
            app:layout_constraintTop_toBottomOf="@id/headImg" />

        <ImageView
            android:id="@+id/image1"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_marginStart="@dimen/min_layout_margin_default"
            android:layout_marginTop="@dimen/min_layout_margin_default"
            app:layout_constraintEnd_toStartOf="@id/image2"
            app:layout_constraintHorizontal_chainStyle="spread_inside"
            app:layout_constraintStart_toStartOf="@id/headImg"
            app:layout_constraintTop_toBottomOf="@id/postContent" />

        <ImageView
            android:id="@+id/image2"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_marginTop="@dimen/min_layout_margin_default"
            app:layout_constraintEnd_toStartOf="@id/image3"
            app:layout_constraintStart_toEndOf="@id/image1"
            app:layout_constraintTop_toBottomOf="@id/postContent" />

        <ImageView
            android:id="@+id/image3"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_marginTop="@dimen/min_layout_margin_default"
            android:layout_marginEnd="@dimen/max_layout_margin_default"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@id/image2"
            app:layout_constraintTop_toBottomOf="@id/postContent" />

        <TextView
            android:id="@+id/topicText"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:paddingTop="@dimen/min_padding_default"
            android:paddingBottom="@dimen/min_padding_default"
            android:text="sfdsdfsdf"
            android:textColor="@color/text_color_56c"
            android:textSize="@dimen/content_text_default"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="@id/headImg"
            app:layout_constraintTop_toBottomOf="@id/image1" />

        <TextView
            android:gravity="center|start"
            android:id="@+id/viewCounts"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_margin="@dimen/min_layout_margin_default"
            android:text="sdfsdfsdfsdf"
            android:textSize="@dimen/content_text_default"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toStartOf="@id/replyCounts"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@id/topicText" />

        <TextView
            android:gravity="center"
            android:id="@+id/replyCounts"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_margin="@dimen/min_layout_margin_default"
            android:text="sdfsdfsdfsdf"
            android:textSize="@dimen/content_text_default"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toStartOf="@id/likeCounts"
            app:layout_constraintStart_toEndOf="@id/viewCounts"
            app:layout_constraintTop_toBottomOf="@id/topicText" />

        <TextView
            android:gravity="center|end"
            android:id="@+id/likeCounts"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_margin="@dimen/min_layout_margin_default"
            android:text="sdfsdfsdfsdf"
            android:textSize="@dimen/content_text_default"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@id/replyCounts"
            app:layout_constraintTop_toBottomOf="@id/topicText" />
    </androidx.constraintlayout.widget.ConstraintLayout>


</androidx.cardview.widget.CardView>
           

第四步:建立自己的 HomeAdapterHolder,注意 AdapterHomePostItemViewBinding 是布局檔案 adapter_home_post_item_view.xml 生成的viewbinding

/**
 * @author Create by 17474 on 2021/4/28.
 * Email: [email protected]
 * Describe:首頁面的加載文章清單的holder
 */
public class HomeAdapterHolder extends BaseViewBindingHolder<AdapterHomePostItemViewBinding> {

    public HomeAdapterHolder(AdapterHomePostItemViewBinding viewBind) {
        super(viewBind);
    }

    public TextView nickName() {
        return getViewBind().nickName;
    }

    public TextView topicText() {
        return getViewBind().topicText;
    }

    public TextView postContent() {
        return getViewBind().postContent;
    }

    public TextView likeCounts() {
        return getViewBind().likeCounts;
    }

    public TextView replyCounts() {
        return getViewBind().replyCounts;
    }

    public TextView viewCounts() {
        return getViewBind().viewCounts;
    }

    public ImageView headImg() {
        return getViewBind().headImg;
    }

    public ImageView postImg1() {
        return getViewBind().image1;
    }

    public ImageView postImg2() {
        return getViewBind().image2;
    }

    public ImageView postImg3() {
        return getViewBind().image3;
    }
}

           

最後,使用 HomeAdapter

/**
 * @author Create by 17474 on 2021/4/28.
 * Email: [email protected]
 * Describe:首頁的擴充卡
 */
public class HomeAdapter extends BaseViewBindingAdapter<TopicResponse.ContentListBean, HomeAdapterHolder> {

    public HomeAdapter() {
        super(R.layout.adapter_home_post_item_view);
    }

    @Override
    protected HomeAdapterHolder getViewBinding(int viewType, LayoutInflater from, ViewGroup parent) {
        return new HomeAdapterHolder(AdapterHomePostItemViewBinding.inflate(from, parent, false));

    }

    @Override
    protected void convert(@NotNull HomeAdapterHolder holder, TopicResponse.ContentListBean contentListBean) {
        holder.nickName().setText(contentListBean.getUserNickName());
        holder.topicText().setText(contentListBean.getTopicName());
        holder.postContent().setText(contentListBean.getPostTitle());
        holder.likeCounts().setText(contentListBean.getPostPageVirtualLikes());
        holder.replyCounts().setText(contentListBean.getPostPageVirtualReplys());
        holder.viewCounts().setText(contentListBean.getPostPageVirtualViews());

        ImageLoadUtils.load(getContext(), contentListBean.getUserImage(), holder.headImg());
        if (TextUtils.isEmpty(contentListBean.getPostImg1())) {
            holder.postImg1().setVisibility(View.GONE);
        } else {
            ImageLoadUtils.load(getContext(), contentListBean.getPostImg1(), holder.postImg1());
            holder.postImg1().setVisibility(View.VISIBLE);
        }
        if (holder.postImg1().getVisibility() == View.GONE) {
            holder.postImg2().setVisibility(View.GONE);
            holder.postImg3().setVisibility(View.GONE);
        } else {
            if (TextUtils.isEmpty(contentListBean.getPostImg2())) {
                holder.postImg2().setVisibility(View.INVISIBLE);
            } else {
                ImageLoadUtils.load(getContext(), contentListBean.getPostImg2(), holder.postImg2());
            }
            if (TextUtils.isEmpty(contentListBean.getPostImg3())) {
                holder.postImg3().setVisibility(View.INVISIBLE);
            } else {
                ImageLoadUtils.load(getContext(), contentListBean.getPostImg3(), holder.postImg3());
            }
        }
    }

}

           

上面的代碼已經很詳細了,完畢!!!