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

107 lines
3.6 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.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);
}
}
}