java - 条件,因此一次只能选择一个 ImageView,而不是同时选择两个(如不喜欢 ImageViews)
问题描述
我可以写什么条件,以便只能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();
});
它现在应该可以工作了。:)
推荐阅读
- python - 多处理给出 AssertionError: daemonic processes are not allowed to have children
- html - CSS - 在具有相同标签名称和属性的其他元素中选择特定元素
- c# - 搜索具有日期范围的工单字段
- string - 最大字符串文字长度大于 2^16 -1
- angular - 无法在 Angular 项目上实现 d3-cloud
- javascript - 具有不可变状态的循环内的对象更新
- javascript - 如何使用 Javascript 在客户端刷新模型
- java - 如何填写现有 PDF 的表单,然后使用 itext 将其添加到新 PDF
- css - 如何使输入文本框在引导程序中占据整个 div
- java - 休眠@Transactional