107 lines
3.6 KiB
Java
107 lines
3.6 KiB
Java
package com.example.livestreaming;
|
|
|
|
import android.view.LayoutInflater;
|
|
import android.view.View;
|
|
import android.view.ViewGroup;
|
|
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.bumptech.glide.Glide;
|
|
|
|
import de.hdodenhof.circleimageview.CircleImageView;
|
|
|
|
/**
|
|
* 好友请求列表适配器
|
|
*/
|
|
public class FriendRequestAdapter extends ListAdapter<FriendRequestItem, FriendRequestAdapter.ViewHolder> {
|
|
|
|
public interface OnRequestActionListener {
|
|
void onAccept(FriendRequestItem item, int position);
|
|
void onReject(FriendRequestItem item, int position);
|
|
}
|
|
|
|
private OnRequestActionListener actionListener;
|
|
|
|
public FriendRequestAdapter() {
|
|
super(DIFF_CALLBACK);
|
|
}
|
|
|
|
public void setOnRequestActionListener(OnRequestActionListener listener) {
|
|
this.actionListener = listener;
|
|
}
|
|
|
|
private static final DiffUtil.ItemCallback<FriendRequestItem> DIFF_CALLBACK =
|
|
new DiffUtil.ItemCallback<FriendRequestItem>() {
|
|
@Override
|
|
public boolean areItemsTheSame(@NonNull FriendRequestItem oldItem, @NonNull FriendRequestItem newItem) {
|
|
return oldItem.getRequestId() == newItem.getRequestId();
|
|
}
|
|
|
|
@Override
|
|
public boolean areContentsTheSame(@NonNull FriendRequestItem oldItem, @NonNull FriendRequestItem newItem) {
|
|
return oldItem.equals(newItem);
|
|
}
|
|
};
|
|
|
|
@NonNull
|
|
@Override
|
|
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
|
View view = LayoutInflater.from(parent.getContext())
|
|
.inflate(R.layout.item_friend_request, parent, false);
|
|
return new ViewHolder(view);
|
|
}
|
|
|
|
@Override
|
|
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
|
|
FriendRequestItem item = getItem(position);
|
|
if (item == null) return;
|
|
|
|
holder.name.setText(item.getNickname() != null ? item.getNickname() : "未知用户");
|
|
holder.message.setText(item.getDisplayMessage());
|
|
|
|
// 加载头像
|
|
if (item.getAvatarUrl() != null && !item.getAvatarUrl().isEmpty()) {
|
|
Glide.with(holder.avatar.getContext())
|
|
.load(item.getAvatarUrl())
|
|
.placeholder(R.drawable.ic_account_circle_24)
|
|
.error(R.drawable.ic_account_circle_24)
|
|
.into(holder.avatar);
|
|
} else {
|
|
holder.avatar.setImageResource(R.drawable.ic_account_circle_24);
|
|
}
|
|
|
|
holder.acceptButton.setOnClickListener(v -> {
|
|
if (actionListener != null) {
|
|
actionListener.onAccept(item, holder.getAdapterPosition());
|
|
}
|
|
});
|
|
|
|
holder.rejectButton.setOnClickListener(v -> {
|
|
if (actionListener != null) {
|
|
actionListener.onReject(item, holder.getAdapterPosition());
|
|
}
|
|
});
|
|
}
|
|
|
|
static class ViewHolder extends RecyclerView.ViewHolder {
|
|
CircleImageView avatar;
|
|
TextView name;
|
|
TextView message;
|
|
TextView acceptButton;
|
|
TextView rejectButton;
|
|
|
|
ViewHolder(@NonNull View itemView) {
|
|
super(itemView);
|
|
avatar = itemView.findViewById(R.id.avatar);
|
|
name = itemView.findViewById(R.id.name);
|
|
message = itemView.findViewById(R.id.message);
|
|
acceptButton = itemView.findViewById(R.id.acceptButton);
|
|
rejectButton = itemView.findViewById(R.id.rejectButton);
|
|
}
|
|
}
|
|
}
|