gpt4 book ai didi

java - 代表喜欢和不喜欢的 ImageView 不会改变颜色,Firebase 中也不会创建新节点

转载 作者:行者123 更新时间:2023-12-02 00:57:20 24 4
gpt4 key购买 nike

我想将喜欢不喜欢ImageView合并到我的项目中,就像YouTube在评论部分中的那样。选择后,它们的颜色会从黑色变为红色,并且只能选择一种。你不能明显地喜欢和不喜欢一条评论,它必须是其中之一。

我目前拥有 Firebase 的方式如下:当有人对帖子发表评论时,评论将被保存,JSON 如下所示 Comments > PostId > CommentId > Publisher, Comment, CommentId 。我想检查 commentId 是否存在,如果存在,那么我想在根节点下创建一个新节点,如下所示: Comments Likes Dislikes > CommentId > Likes, Dislikes > UserId:true(取决于他们选择喜欢不喜欢

我的代码没有将 like ImageView 变成红色,也没有创建新节点。不知道我在这里缺少什么。有人可以告诉我我的想法是否正确,也许我的代码中存在错误,为什么 ImageView 没有从黑色变为红色 onClick.

不知道为什么我在这方面遇到这么多麻烦...我是否考虑了逻辑错误?有更好的办法吗?

enter image description here

评论适配器

@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 放在该节点下。

总而言之,您的数据库结构应该如下所示。

Struvcture

我为什么建议这个?

正如您所见,只要引用父节点,Fire-base 就会下载所有子节点。这意味着当您的评论的喜欢/不喜欢增加时,您的单个评论节点也会增加。想象一下,一篇帖子有 120 条评论,每条评论有 120 条喜欢和不喜欢,加载速度会很慢。

因此,最好将喜欢和不喜欢的内容记录到另一个单独的节点中。让我知道你的想法。

关于java - 代表喜欢和不喜欢的 ImageView 不会改变颜色,Firebase 中也不会创建新节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61179468/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com