Условие, чтобы можно было выбрать только один из ImageView одновременно, а не оба одновременно (например, не нравится ImageViews) - PullRequest
0 голосов
/ 14 апреля 2020

Какое условие я могу написать, чтобы можно было выбрать только один ImageView, один или другой. У меня есть кнопки как и нелюбовь (ImageView), которые пользователь может нажать на сообщение, но можно выбрать только одну за один раз, и если она выбрана, а пользователь нажимает кнопку другой, первый должен отменить свой выбор. Когда в моем случае выбрано, ImageView меняет цвета.

Какое условие я могу написать, чтобы можно было выбирать только одно или другое, а не оба?

Я обновил свой код, но я все еще не могу заставить его работать. Даже с isSelected(), setSelected(). Может ли кто-нибудь сообщить мне, что я все еще делаю неправильно? Почему не только один ImageView выбран. Я все еще могу выбрать оба одновременно ...

CommentAdapter

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) {

            }
        });
    }
}

1 Ответ

0 голосов
/ 14 апреля 2020

Да Вы можете реализовать эту функцию, сделав селектор. в вашей папке 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>

в вашей активности. 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"/>

А теперь в вашей активности. 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();
        });

теперь должно работать. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...