效果

DetailActivity
package com.coral3.ah.ui.activity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.coral3.ah.R;
import com.coral3.ah.adapter.DetailAdapter;
import com.coral3.ah.data.DataDetail;
import com.coral3.ah.data.DataOther;
import com.coral3.common_module.base.BaseActivity;
import com.coral3.common_module.utils.GlideUtil;
import com.coral3.common_module.utils.StatusBarUtil;
import com.coral3.common_module.utils.SysManager;
public class DetailActivity extends BaseActivity {
private ImageView userLogo;
private View vStatusSeat;
private ImageView ivBack;
private RecyclerView recyclerView;
private DetailAdapter detailAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
StatusBarUtil.setLightStatusBar(this, true, true);
initView();
initListener();
}
@Override
protected void initView() {
ivBack = findViewById(R.id.iv_back);
recyclerView = findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new GridLayoutManager(this, 6, GridLayoutManager.VERTICAL, false));
detailAdapter = new DetailAdapter(this);
recyclerView.setAdapter(detailAdapter);
detailAdapter.addData(DataDetail.getData());
userLogo = findViewById(R.id.iv_ta_logo);
GlideUtil.loadImgCircle(this, R.mipmap.ic_head_default_girl, userLogo);
vStatusSeat = findViewById(R.id.v_status_seat);
int height = SysManager.getInstance().getStatusBarHeight(this);
ViewGroup.LayoutParams params = vStatusSeat.getLayoutParams();
params.height = height;
vStatusSeat.setLayoutParams(params);
}
@Override
protected void initListener() {
ivBack.setOnClickListener(this);
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (recyclerView.getChildCount() > 0
&& recyclerView.computeVerticalScrollOffset() + recyclerView.computeVerticalScrollExtent()
>= recyclerView.computeVerticalScrollRange()) {
if(detailAdapter.getLoadStatus() == 2) return;
if(detailAdapter.getItemCount() < 25) {
detailAdapter.addData(DataOther.getOtherList());
}else {
detailAdapter.setLoadStatus(2);
detailAdapter.addData("没有更多数据");
}
}
}
});
}
@Override
public void onClick(View view) {
if(view.getId() == R.id.iv_back) {
finish();
}
}
}
DetailAdapter
package com.coral3.ah.adapter;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.target.CustomTarget;
import com.bumptech.glide.request.transition.Transition;
import com.coral3.ah.R;
import com.coral3.ah.bean.BeanDetail;
import com.coral3.ah.entity.bo.ListBO;
import com.coral3.common_module.base.BaseBuildInfo;
import com.coral3.common_module.utils.AppManager;
import com.coral3.common_module.utils.GlideUtil;
import com.coral3.common_module.utils.WinManagerUtil;
import com.youth.banner.Banner;
import com.youth.banner.indicator.CircleIndicator;
import java.util.ArrayList;
import java.util.List;
public class DetailAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
public static final int ITEM_HEAD = 0;
public static final int ITEM_MESSAGE = 1;
public static final int ITEM_TALK = 2;
public static final int ITEM_NO_MORE = 3;
private int status;
private Context context;
private List<Object> datas = new ArrayList<>();
public DetailAdapter(Context context) {
this.context = context;
}
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();
if (layoutManager instanceof GridLayoutManager) {
GridLayoutManager gridLayoutManager = (GridLayoutManager) layoutManager;
gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
return 6;
}
});
}
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == ITEM_HEAD) {
return new HeadViewHolder(LayoutInflater.from(parent.getContext())
.inflate(R.layout.layout_recyclerview_item_talk_banner, parent, false));
} else if (viewType == ITEM_MESSAGE) {
return new MessageViewHolder(LayoutInflater.from(parent.getContext())
.inflate(R.layout.layout_recyclerview_item_talk_center, parent, false));
} else if (viewType == ITEM_TALK) {
return new TalkViewHolder(LayoutInflater.from(parent.getContext())
.inflate(R.layout.layout_recyclerview_item_talk_list, parent, false));
} else if (viewType == ITEM_NO_MORE) {
return new NoMoreViewHolder(LayoutInflater.from(parent.getContext())
.inflate(R.layout.layout_no_more, parent, false));
} else {
return null;
}
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (holder instanceof HeadViewHolder) {
BeanDetail beanDetail = (BeanDetail) datas.get(position);
Banner banner = ((HeadViewHolder) holder).banner;
List<String> images = new ArrayList<>();
Glide.with(context)
.asBitmap()
.load(BaseBuildInfo.BASE_URL + "/" + BaseBuildInfo.CONTEXT + "/userFile/image/test_xhs.jpg")
.into(new CustomTarget<Bitmap>() {
@Override
public void onResourceReady(@NonNull Bitmap bitmap, @Nullable Transition<? super Bitmap> transition) {
int width = bitmap.getWidth();
int height = bitmap.getHeight();
int screenW = WinManagerUtil.getWidth(AppManager.getInstance().getTopActivity());
int bh = screenW * height / width;
ViewGroup.LayoutParams params = banner.getLayoutParams();
params.height = bh;
banner.setLayoutParams(params);
}
@Override
public void onLoadCleared(@Nullable Drawable drawable) {
}
});
images.add(BaseBuildInfo.BASE_URL + "/" + BaseBuildInfo.CONTEXT + "/userFile/image/test_xhs.jpg");
images.add(BaseBuildInfo.BASE_URL + "/" + BaseBuildInfo.CONTEXT + "/userFile/image/test_xhs2.jpg");
images.add(BaseBuildInfo.BASE_URL + "/" + BaseBuildInfo.CONTEXT + "/userFile/image/test_xhs1.jpg");
banner.setAdapter(new ImageAdapter(images, context)).setIndicator(new CircleIndicator(context)).isAutoLoop(false);
banner.setIndicatorSelectedColor(context.getResources().getColor(R.color.banner_Indicator_select));
}
else if (holder instanceof MessageViewHolder) {
BeanDetail beanDetail = (BeanDetail) datas.get(position);
MessageViewHolder messageViewHolder = (MessageViewHolder) holder;
GlideUtil.loadImgCircle(context, R.mipmap.ic_head_default, messageViewHolder.senderAvatar);
}
else if (holder instanceof TalkViewHolder) {
ListBO listBO = (ListBO) datas.get(position);
TalkViewHolder talkViewHolder = (TalkViewHolder) holder;
GlideUtil.loadImgCircle(context, R.mipmap.ic_head_default, talkViewHolder.ivAvatar);
talkViewHolder.tvTalkContent.setText(listBO.getTalkContent());
}
}
@Override
public int getItemCount() {
return datas.size();
}
@Override
public int getItemViewType(int position) {
if (position == 0) {
return ITEM_HEAD;
} else if (position == 1) {
return ITEM_MESSAGE;
} else if (datas.get(position) instanceof ListBO) {
return ITEM_TALK;
} else {
return ITEM_NO_MORE;
}
}
public class HeadViewHolder extends RecyclerView.ViewHolder {
public Banner banner;
public HeadViewHolder(View itemView) {
super(itemView);
banner = itemView.findViewById(R.id.talk_banner);
}
}
public class MessageViewHolder extends RecyclerView.ViewHolder {
public ImageView senderAvatar;
public MessageViewHolder(View itemView) {
super(itemView);
senderAvatar = (ImageView) itemView.findViewById(R.id.iv_my_logo);
}
}
public class TalkViewHolder extends RecyclerView.ViewHolder {
public ImageView ivAvatar;
public TextView tvTalkContent;
public TalkViewHolder(View itemView) {
super(itemView);
ivAvatar = itemView.findViewById(R.id.iv_user_avatar);
tvTalkContent = itemView.findViewById(R.id.tv_talk_content);
}
}
public class NoMoreViewHolder extends RecyclerView.ViewHolder {
public TextView tv_name;
public NoMoreViewHolder(View itemView) {
super(itemView);
tv_name = itemView.findViewById(R.id.tv_load_end);
}
}
public void addData(BeanDetail detail) {
datas.add(detail);
datas.add(detail);
datas.addAll(detail.getTalkList());
notifyDataSetChanged();
}
public void addData(List<ListBO> others) {
datas.addAll(others);
notifyDataSetChanged();
}
public void addData(String noMore) {
datas.add(noMore);
notifyDataSetChanged();
}
public void setLoadStatus(int status){
this.status = status;
}
public int getLoadStatus(){
return status;
}
public void clearData() {
datas.clear();
notifyDataSetChanged();
}
}
layout_recyclerview_item_talk_center
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="horizontal"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="15dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="童年的味道"
android:textColor="#F3000000"
android:textSize="18sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:text="编辑于 2023-03-02 11:38 广东"
android:textColor="#919191"
android:textSize="10sp" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginTop="15dp"
android:background="#F0F0F0" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:textSize="12sp"
android:text="共6条评论"
android:textColor="#676666" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView
android:id="@+id/iv_my_logo"
android:layout_width="35dp"
android:layout_height="35dp"
android:src="@mipmap/ic_head_default" />
<TextView
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_marginLeft="10dp"
android:textSize="15sp"
android:background="@drawable/bg_radius_100_light_gray"
android:gravity="center_vertical"
android:text="爱评论的人总是热情的~"
android:textColor="#717070" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
layout_recyclerview_item_talk_list
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="horizontal"
android:paddingLeft="10dp"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="wrap_content"
android:orientation="vertical"
android:gravity="center_horizontal"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/iv_user_avatar"
android:src="@mipmap/ic_head_default"
android:layout_width="35dp"
android:layout_height="35dp"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="wrap_content">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="0dp"
android:layout_weight="1"
android:orientation="vertical"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tv_username"
android:text="蓝之静云"
android:textColor="#919090"
android:textSize="12sp"
android:gravity="center_vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<com.coral3.common_module.components.LayoutForTextView
android:layout_width="match_parent"
android:id="@+id/lf_talk_text"
android:layout_marginTop="5dp"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tv_talk_content"
android:textColor="#3E3E3E"
android:textSize="13sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:text="4天前 广东"
android:paddingLeft="5dp"
android:textSize="11sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</com.coral3.common_module.components.LayoutForTextView>
</LinearLayout>
<LinearLayout
android:layout_width="30dp"
android:gravity="right"
android:layout_height="wrap_content">
<ImageView
android:src="@mipmap/love"
android:layout_width="25dp"
android:layout_height="25dp"/>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:orientation="vertical"
android:layout_height="wrap_content">
</LinearLayout>
<TextView
android:background="#F0F0F0"
android:layout_marginTop="15dp"
android:layout_marginBottom="15dp"
android:layout_width="match_parent"
android:layout_height="1dp"/>
</LinearLayout>
</LinearLayout>