Android中最喜欢的按钮无法正常工作

时间:2018-04-27 09:38:47

标签: java android xml

Hii我正在创建一个应用程序,我有一个小的心脏图像点击该图像我已设置onclick listener所以当我点击该图像时,它被另一个红色的心脏图像替换。

所以我的问题是,当我再次点击红色心脏图像时,它不会转向其正常状态,这是空白的心脏矢量图像,因为我是新的android我没有太多的知识,如果有人可以指导。

我的图片onclick代码

  @Override
    public void onBindViewHolder(FeedViewHolder holder, int position) {
    int image_id = images[position];
    //holder.background_image_layout.setImageDrawable(null);
    //holder.background_image_layout.setImageResource(image_id);
    holder.background_image.setBackgroundResource(image_id);

    }

    @Override
    public int getItemCount() {
        return images.length;
    }
    public static class FeedViewHolder extends RecyclerView.ViewHolder {
        CustomTextViewMedium first_text,second_text,third_text,fourth_text,fifth_text,sixth_text,
                seventh_text;
        ImageView favourite_image;
        CardView primary_card;
        LinearLayout background_image;
        ImageView background_image_layout;
        CircleImageView profile_image;
        public FeedViewHolder(View itemView) {
            super(itemView);
            background_image = (LinearLayout)itemView.findViewById(R.id.background_image);
            primary_card = (CardView)itemView.findViewById(R.id.primary_card);
            first_text = (CustomTextViewMedium)itemView.findViewById(R.id.first_text);
            second_text = (CustomTextViewMedium)itemView.findViewById(R.id.second_text);
            third_text = (CustomTextViewMedium)itemView.findViewById(R.id.third_text);
            fourth_text = (CustomTextViewMedium)itemView.findViewById(R.id.fourth_text);
            fifth_text = (CustomTextViewMedium)itemView.findViewById(R.id.fifth_text);
            sixth_text = (CustomTextViewMedium)itemView.findViewById(R.id.sixth_text);
            seventh_text = (CustomTextViewMedium)itemView.findViewById(R.id.seventh_text);
            favourite_image = (ImageView)itemView.findViewById(R.id.favourite_image);
            background_image_layout = (ImageView) itemView.findViewById(R.id.background_image_layout);
            profile_image = (CircleImageView)itemView.findViewById(R.id.profile_image);
            favourite_image.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(favourite_image.isPressed()){
                        favourite_image.setImageResource(R.drawable.ic_heart);
                        favourite_image.setScaleType(ImageView.ScaleType.CENTER_CROP);
                    }
                    else {
                        favourite_image.setImageResource(R.drawable.ic_favorite_border_black_24dp);
                        favourite_image.setScaleType(ImageView.ScaleType.CENTER_CROP);
                    }
                }
            });


        }
    }

2 个答案:

答案 0 :(得分:1)

使用if这样的条件: -

首先全局定义如下: -

boolean imageChange = true;

然后在setOnClickListener中执行此操作: -

  favourite_image.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if(imageChange ){
                            favourite_image.setImageResource(R.drawable.ic_heart);
                            favourite_image.setScaleType(ImageView.ScaleType.CENTER_CROP);
                            imageChange = false;                        
                           }else {
                                favourite_image.setImageResource(R.drawable.ic_favorite_border_black_24dp);
                                favourite_image.setScaleType(ImageView.ScaleType.CENTER_CROP);
                                imageChange = true;
                            }
                        }
                    });

答案 1 :(得分:0)

问题是favourite_image.isPressed()不是View的持久状态。仅当用户将手指放在视图上时,它才会为true

为了克服这个问题,你有两个类似的选择:

选项#1

您可以检查其他状态,例如isPressed,而不是检查isSelected。由于这是ImageView,您可能需要在点击时手动设置状态。

public void onClick(View v) {
                    if(favourite_image.isSelected()){
                        favourite_image.setImageResource(R.drawable.ic_heart);
                        favourite_image.setScaleType(ImageView.ScaleType.CENTER_CROP);
                        favourite_image.setSelected(false)
                    }
                    else {
                        favourite_image.setImageResource(R.drawable.ic_favorite_border_black_24dp);
                        favourite_image.setScaleType(ImageView.ScaleType.CENTER_CROP);
                        favourite_image.setSelected(true)
                    }
                }

选项#2

使用一些简单的boolean来跟踪所选状态,并设置/ chec其值与上面代码的相似性。