zhibo/android-app/app/src/main/java/com/example/livestreaming/WaterfallRoomsAdapter.java

119 lines
4.1 KiB
Java
Raw Normal View History

2025-12-17 08:47:15 +08:00
package com.example.livestreaming;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.DiffUtil;
import androidx.recyclerview.widget.ListAdapter;
import androidx.recyclerview.widget.RecyclerView;
import com.example.livestreaming.net.Room;
public class WaterfallRoomsAdapter extends ListAdapter<Room, WaterfallRoomsAdapter.RoomVH> {
public interface OnRoomClickListener {
void onRoomClick(Room room);
}
private final OnRoomClickListener onRoomClick;
public WaterfallRoomsAdapter(OnRoomClickListener onRoomClick) {
super(DIFF);
this.onRoomClick = onRoomClick;
}
@NonNull
@Override
public RoomVH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_room_waterfall, parent, false);
return new RoomVH(view, onRoomClick);
}
@Override
public void onBindViewHolder(@NonNull RoomVH holder, int position) {
holder.bind(getItem(position));
}
static class RoomVH extends RecyclerView.ViewHolder {
private final ImageView coverImage;
private final TextView liveBadge;
private final LinearLayout viewerCountLayout;
private final TextView viewerCount;
private final TextView roomTitle;
private final ImageView streamerAvatar;
private final TextView streamerName;
private final TextView hotBadge;
private final OnRoomClickListener onRoomClick;
RoomVH(View itemView, OnRoomClickListener onRoomClick) {
super(itemView);
this.onRoomClick = onRoomClick;
coverImage = itemView.findViewById(R.id.coverImage);
liveBadge = itemView.findViewById(R.id.liveBadge);
viewerCountLayout = itemView.findViewById(R.id.viewerCountLayout);
viewerCount = itemView.findViewById(R.id.viewerCount);
roomTitle = itemView.findViewById(R.id.roomTitle);
streamerAvatar = itemView.findViewById(R.id.streamerAvatar);
streamerName = itemView.findViewById(R.id.streamerName);
hotBadge = itemView.findViewById(R.id.hotBadge);
}
void bind(Room room) {
if (room == null) return;
// 设置标题
roomTitle.setText(room.getTitle() != null ? room.getTitle() : "(无标题)");
// 设置主播名称
streamerName.setText(room.getStreamerName() != null ? room.getStreamerName() : "");
// 设置直播状态
if (room.isLive()) {
liveBadge.setVisibility(View.VISIBLE);
viewerCountLayout.setVisibility(View.VISIBLE);
viewerCount.setText(String.valueOf(room.getViewerCount()));
// 如果观看人数超过100显示热门标签
if (room.getViewerCount() > 100) {
hotBadge.setVisibility(View.VISIBLE);
} else {
hotBadge.setVisibility(View.GONE);
}
} else {
liveBadge.setVisibility(View.GONE);
viewerCountLayout.setVisibility(View.GONE);
hotBadge.setVisibility(View.GONE);
}
// 点击事件
itemView.setOnClickListener(v -> {
if (onRoomClick != null) {
onRoomClick.onRoomClick(room);
}
});
}
}
private static final DiffUtil.ItemCallback<Room> DIFF = new DiffUtil.ItemCallback<Room>() {
@Override
public boolean areItemsTheSame(@NonNull Room oldItem, @NonNull Room newItem) {
String o = oldItem.getId();
String n = newItem.getId();
return o != null && o.equals(n);
}
@Override
public boolean areContentsTheSame(@NonNull Room oldItem, @NonNull Room newItem) {
return oldItem.equals(newItem);
}
};
}