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());
}
}
}
}
上面的代碼已經很詳細了,完畢!!!