164 lines
5.0 KiB
Java
164 lines
5.0 KiB
Java
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; }
|
|
}
|
|
}
|