我想将喜欢和不喜欢ImageView
合并到我的项目中,就像YouTube在评论部分中的那样。选择后,它们的颜色会从黑色变为红色,并且只能选择一种。你不能明显地喜欢和不喜欢一条评论,它必须是其中之一。
我目前拥有 Firebase 的方式如下:当有人对帖子发表评论时,评论将被保存,JSON 如下所示 Comments > PostId > CommentId > Publisher, Comment, CommentId
。我想检查 commentId
是否存在,如果存在,那么我想在根节点下创建一个新节点,如下所示: Comments Likes Dislikes > CommentId > Likes, Dislikes > UserId:true
(取决于他们选择喜欢或不喜欢。
我的代码没有将 like ImageView
变成红色,也没有创建新节点。不知道我在这里缺少什么。有人可以告诉我我的想法是否正确,也许我的代码中存在错误,为什么 ImageView
没有从黑色变为红色 onClick
.
不知道为什么我在这方面遇到这么多麻烦...我是否考虑了逻辑错误?有更好的办法吗?
评论适配器
@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {
mFirebaseUser = FirebaseAuth.getInstance().getCurrentUser();
final Comment comment = mComment.get(position);
commentLike(holder.commentLike);
holder.commentLike.setOnClickListener(v -> {
if (holder.commentLike.getTag().equals("like")) {
FirebaseDatabase.getInstance().getReference().child("Comment Likes Dislikes")
.child(comment.getCommentid()).child("Likes").child(mFirebaseUser.getUid()).setValue(true);
} else {
FirebaseDatabase.getInstance().getReference().child("Comment Likes Dislikes")
.child(comment.getCommentid()).child("Likes").child(mFirebaseUser.getUid()).removeValue();
}
});
public static class ViewHolder extends RecyclerView.ViewHolder {
ImageView commentLike;
ViewHolder(@NonNull View itemView) {
super(itemView);
commentLike = itemView.findViewById(R.id.icon_thumb_up_black);
}
}
private void commentLike(ImageView imageView) {
DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("Comments").child(postid);
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
Comment comment = dataSnapshot.getValue(Comment.class);
if (comment != null) {
if (dataSnapshot.child(comment.getCommentid()).exists()) {
imageView.setImageResource(R.drawable.ic_thumb_up_red);
imageView.setTag("liked");
} else {
imageView.setImageResource(R.drawable.ic_thumb_up_black);
imageView.setTag("like");
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
最佳答案
这是我的建议。
将根节点下的节点命名为“Likes_Dislikes”。每当用户喜欢或不喜欢评论时,都会在“Likes_Dislikes”下创建另一个节点作为评论的 ID。 在该节点下创建了两个名为“喜欢”和“不喜欢”的节点,并根据用户的操作将用户 ID 放在该节点下。
总而言之,您的数据库结构应该如下所示。
我为什么建议这个?
正如您所见,只要引用父节点,Fire-base 就会下载所有子节点。这意味着当您的评论的喜欢/不喜欢增加时,您的单个评论节点也会增加。想象一下,一篇帖子有 120 条评论,每条评论有 120 条喜欢和不喜欢,加载速度会很慢。
因此,最好将喜欢和不喜欢的内容记录到另一个单独的节点中。 让我知道你的想法。
关于java - 代表喜欢和不喜欢的 ImageView 不会改变颜色,Firebase 中也不会创建新节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61179468/