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

164 lines
5.0 KiB
Java
Raw Normal View History

package com.example.livestreaming;
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.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
import java.util.List;
/**
* 频道管理适配器
* 用于显示我的频道和推荐频道
*/
public class ChannelManagerAdapter extends RecyclerView.Adapter<ChannelManagerAdapter.ViewHolder> {
public interface OnChannelClickListener {
void onChannelClick(ChannelItem item, int position);
void onChannelDelete(ChannelItem item, int position);
void onChannelAdd(ChannelItem item, int position);
}
private final List<ChannelItem> items = new ArrayList<>();
private OnChannelClickListener listener;
private boolean isEditMode = false;
private boolean isRecommendMode = false; // 是否是推荐频道模式
private int fixedCount = 4; // 前4个固定不能删除
public void setOnChannelClickListener(OnChannelClickListener listener) {
this.listener = listener;
}
public void setEditMode(boolean editMode) {
this.isEditMode = editMode;
notifyDataSetChanged();
}
public void setRecommendMode(boolean recommendMode) {
this.isRecommendMode = recommendMode;
}
public void setFixedCount(int count) {
this.fixedCount = count;
}
public void submitList(List<ChannelItem> newItems) {
items.clear();
if (newItems != null) {
items.addAll(newItems);
}
notifyDataSetChanged();
}
public List<ChannelItem> getItems() {
return new ArrayList<>(items);
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_channel_tag, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
ChannelItem item = items.get(position);
holder.bind(item, position);
}
@Override
public int getItemCount() {
return items.size();
}
class ViewHolder extends RecyclerView.ViewHolder {
private final TextView channelName;
private final ImageView fixedIcon;
private final ImageView deleteIcon;
private final ImageView addIcon;
ViewHolder(@NonNull View itemView) {
super(itemView);
channelName = itemView.findViewById(R.id.channelName);
fixedIcon = itemView.findViewById(R.id.fixedIcon);
deleteIcon = itemView.findViewById(R.id.deleteIcon);
addIcon = itemView.findViewById(R.id.addIcon);
}
void bind(ChannelItem item, int position) {
channelName.setText(item.getName());
// 重置所有图标状态
fixedIcon.setVisibility(View.GONE);
deleteIcon.setVisibility(View.GONE);
addIcon.setVisibility(View.GONE);
if (isRecommendMode) {
// 推荐频道模式:显示添加图标
addIcon.setVisibility(View.VISIBLE);
itemView.setOnClickListener(v -> {
if (listener != null) {
listener.onChannelAdd(item, position);
}
});
} else {
// 我的频道模式
boolean isFixed = position < fixedCount;
if (isEditMode) {
// 编辑模式
if (isFixed) {
fixedIcon.setVisibility(View.VISIBLE);
} else {
deleteIcon.setVisibility(View.VISIBLE);
deleteIcon.setOnClickListener(v -> {
if (listener != null) {
listener.onChannelDelete(item, position);
}
});
}
}
itemView.setOnClickListener(v -> {
if (listener != null) {
listener.onChannelClick(item, position);
}
});
}
}
}
/**
* 频道项数据类
*/
public static class ChannelItem {
private final String id;
private final String name;
private boolean isFixed;
public ChannelItem(String id, String name) {
this.id = id;
this.name = name;
this.isFixed = false;
}
public ChannelItem(String id, String name, boolean isFixed) {
this.id = id;
this.name = name;
this.isFixed = isFixed;
}
public String getId() { return id; }
public String getName() { return name; }
public boolean isFixed() { return isFixed; }
public void setFixed(boolean fixed) { this.isFixed = fixed; }
}
}