java - 条件是一次只能选择一个 ImageView,而不是同时选择两个(就像不喜欢 ImageViews 一样)

标签 java android firebase firebase-realtime-database

我可以写什么条件,以便只能选择一个ImageView,无论是其中之一还是另一个。我有一个喜欢不喜欢按钮(ImageView),用户可以点击该按钮来发布帖子,但一次只能选择一个,并且如果选择一个并且用户击中另一个时,第一个必须取消选择自己。在我的例子中选择时,ImageView 会改变颜色。

我可以写什么条件,以便一次只能选择其中之一,而不是两者?

我已经更新了我的代码,但仍然无法让它工作。即使使用 isSelected()、setSelected()。有人可以让我知道我仍然做错了什么吗?为什么不只选择一个 ImageView。我仍然可以同时选择两者...

评论适配器

public class CommentAdapter extends RecyclerView.Adapter<CommentAdapter.ViewHolder> {

    private Context mContext;
    private List<Comment> mComment;
    private String postid;
    private FirebaseUser mFirebaseUser;

    public CommentAdapter(Context mContext, List<Comment> mComment, String postid) {
        this.mContext = mContext;
        this.mComment = mComment;
        this.postid = postid;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(mContext).inflate(R.layout.comment_item, parent, false);

        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {

        mFirebaseUser = FirebaseAuth.getInstance().getCurrentUser();
        final Comment comment = mComment.get(position);

        holder.comment.setText(comment.getComment());
        commentLike(comment.getCommentid(), holder.commentLike);
        commentDislike(comment.getCommentid(), holder.commentDislike);
        getUserInfo(holder.image_profile, holder.username, comment.getPublisher());
        commentLikesNumber(holder.commentLikesNumber, comment.getCommentid());
        commentDislikesNumber(holder.commentDislikesNumber, comment.getCommentid());

        holder.commentLike.setOnClickListener(v -> {

            if (holder.commentLike.getTag().equals("like")) {
                FirebaseDatabase.getInstance().getReference().child("Comment Liked or Disliked").child(comment.getCommentid()).child("Likes").child(mFirebaseUser.getUid()).setValue(true);
            } else {
                FirebaseDatabase.getInstance().getReference().child("Comment Liked or Disliked").child(comment.getCommentid()).child("Likes").child(mFirebaseUser.getUid()).removeValue();
            }
        });

        holder.commentDislike.setOnClickListener(v -> {

            if (holder.commentDislike.getTag().equals("dislike")) {
                FirebaseDatabase.getInstance().getReference().child("Comment Liked or Disliked").child(comment.getCommentid()).child("Dislikes").child(mFirebaseUser.getUid()).setValue(true);
                Toast.makeText(mContext, "Don't be mean", Toast.LENGTH_SHORT).show();
            } else {
                FirebaseDatabase.getInstance().getReference().child("Comment Liked or Disliked").child(comment.getCommentid()).child("Dislikes").child(mFirebaseUser.getUid()).removeValue();
            }
        });

        holder.image_profile.setOnClickListener(v -> {

            Intent intent = new Intent(mContext, MainActivity.class);
            intent.putExtra("publisherid", comment.getPublisher());
            mContext.startActivity(intent);
        });

        holder.itemView.setOnLongClickListener(v -> {
            if (comment.getPublisher().equals(mFirebaseUser.getUid())) {
                AlertDialog alertDialog = new AlertDialog.Builder(mContext).create();
                alertDialog.setTitle("Do you want to delete this comment?");
                alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "No",
                        (dialog, which) -> dialog.dismiss());
                alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "Yes",
                        (dialog, which) -> {
                            FirebaseDatabase.getInstance().getReference("Comments").child(postid).child(comment.getCommentid())
                                    .setValue(null).addOnCompleteListener(task -> {
                                if (task.isSuccessful()) {
                                    Toast.makeText(mContext, "Your comment has been deleted", Toast.LENGTH_SHORT).show();
                                }
                            });
                            dialog.dismiss();
                        });
                alertDialog.show();
            }
            return true;
        });
    }

    @Override
    public int getItemCount() {
        if (mComment != null) {
            return mComment.size();
        } else {
            return 0;
        }
    }

    static class ViewHolder extends RecyclerView.ViewHolder {

        CircleImageView image_profile;
        TextView username, comment, commentLikesNumber, commentDislikesNumber;
        ImageView commentLike, commentDislike;

        ViewHolder(@NonNull View itemView) {
            super(itemView);

            image_profile = itemView.findViewById(R.id.image_profile);
            comment = itemView.findViewById(R.id.comment);
            username = itemView.findViewById(R.id.username);
            commentLike = itemView.findViewById(R.id.icon_thumb_up_grey);
            commentDislike = itemView.findViewById(R.id.icon_thumb_down_grey);
            commentLikesNumber = itemView.findViewById(R.id.comment_likes_number);
            commentDislikesNumber = itemView.findViewById(R.id.comment_dislikes_number);
        }
    }

    private void getUserInfo(final CircleImageView prof_image, final TextView username, String publisherid) {
        DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("Users").child(publisherid);
        reference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                User user = dataSnapshot.getValue(User.class);
                if (user != null) {
                    Glide.with(mContext.getApplicationContext()).load(user.getImageurl()).into(prof_image);
                    username.setText(user.getUsername());
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });
    }

    private void commentLike(final String commentid, final ImageView imageView) {
        if (commentid != null) {
            DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("Comment Liked or Disliked").child(commentid).child("Likes");
            reference.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    if (mFirebaseUser != null)
                        if (dataSnapshot.child(mFirebaseUser.getUid()).exists()) {
                            imageView.setImageResource(R.drawable.ic_thumb_up_red);
                            imageView.setTag("liked");
                        } else {
                            imageView.setImageResource(R.drawable.ic_thumb_up_grey);
                            imageView.setTag("like");
                        }
                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {

                }
            });
        }
    }

    private void commentDislike(final String commentid, final ImageView imageView) {
        if (commentid != null) {
            DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("Comment Liked or Disliked").child(commentid).child("Dislikes");
            reference.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    if (mFirebaseUser != null)
                        if (dataSnapshot.child(mFirebaseUser.getUid()).exists()) {
                            imageView.setImageResource(R.drawable.ic_thumb_down_black);
                            imageView.setTag("disliked");
                        } else {
                            imageView.setImageResource(R.drawable.ic_thumb_down_grey);
                            imageView.setTag("dislike");
                        }
                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {

                }
            });
        }
    }

    private void commentLikesNumber(TextView commentLikesNumber, String commentid) {
        DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("Comment Liked or Disliked").child(commentid).child("Likes");
        reference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                commentLikesNumber.setText(dataSnapshot.getChildrenCount() + "");
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });
    }

    private void commentDislikesNumber(TextView commentDislikesNumber, String commentid) {
        DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("Comment Liked or Disliked").child(commentid).child("Dislikes");
        reference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                commentDislikesNumber.setText(dataSnapshot.getChildrenCount() + "");
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });
    }
}

最佳答案

是的,您可以通过创建选择器来实现此功能。 在您的 drawable 文件夹中。

image_selector.xml

<selector
  xmlns:android="http://schemas.android.com/apk/res/android">    
    <item android:state_selected="true" android:drawable="@drawable/select.png" />
    <item android:drawable="@drawable/normal.png" />
</selector>

在您的activity.xml

<ImageView 
    android:id="@+id/img1"
    android:clickable="true"
    android:focusable="true"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/image_selector"/>
<ImageView 
    android:id="@+id/img2"
    android:clickable="true"
    android:focusable="true"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/image_selector"/>

现在在你的activity.java

holder.commentLike.setOnClickListener(v -> {
                 if(img1.isSelected()){
                    img1.setSelected(false);
                 }else(
                    img1.setSelected(true);
                    img2.setSelected(false);
                 }

    });

    holder.commentDislike.setOnClickListener(v -> {
                 if(img2.isSelected()){
                    img2.setSelected(false);
                  }else(
                    img1.setSelected(false);
                    img2.setSelected(true);
                  }
    });

编辑

请在您的代码中更新此内容

holder.commentLike.setOnClickListener(v -> {

            if (holder.commentLike.getTag().equals("like")) {
                FirebaseDatabase.getInstance().getReference().child("Comment Liked or Disliked").child(comment.getCommentid()).child("Likes").child(mFirebaseUser.getUid()).setValue(true);
            } else {
                FirebaseDatabase.getInstance().getReference().child("Comment Liked or Disliked").child(comment.getCommentid()).child("Likes").child(mFirebaseUser.getUid()).removeValue();
            }

            notifyDataSetChanged();
        });

        holder.commentDislike.setOnClickListener(v -> {

            if (holder.commentDislike.getTag().equals("dislike")) {
                FirebaseDatabase.getInstance().getReference().child("Comment Liked or Disliked").child(comment.getCommentid()).child("Dislikes").child(mFirebaseUser.getUid()).setValue(true);
                Toast.makeText(mContext, "Don't be mean", Toast.LENGTH_SHORT).show();
            } else {
                FirebaseDatabase.getInstance().getReference().child("Comment Liked or Disliked").child(comment.getCommentid()).child("Dislikes").child(mFirebaseUser.getUid()).removeValue();
            }
            notifyDataSetChanged();
        });

现在应该可以工作了。 :)

关于java - 条件是一次只能选择一个 ImageView,而不是同时选择两个(就像不喜欢 ImageViews 一样),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61198751/

相关文章:

java - Google Play 游戏服务邀请丢失

android - 在 Android 中使用 Firebase 在 RecyclerView 上获取 onClickListener

typescript - 我的 Stripe 签名 key 是什么,我在哪里可以找到它?

java - Maven Tomcat 插件更改端口

java - 无法访问文件,因为正在使用

java.lang.ClassNotFoundException : javax. servlet.jsp.jSTL.sql.SQLExecutionTag

java - 有多少人可以连接到ServerSocket?

android - React Native Android 模块与 Android Studio 和 React Native Builder 冲突

安卓SSL证书转换

javascript - 无法访问由 fire base 的当前用户电子邮件地址设置的 node.js 中的文档名称