setColorFilter在自定义列表适配器中不起作用吗?

时间:2017-01-16 07:19:50

标签: android

已经3-4个小时了,我仍然无法弄清楚为什么我的imageView颜色会自动更改我几乎所有事情都做了。这是customListAdapter的getView代码

@Override
public View getView(final int position, View convertView, @NonNull ViewGroup parent) {
    final ViewHolder viewHolder;
    if (convertView == null) {
        LayoutInflater inflater = LayoutInflater.from(context);
        convertView = inflater.inflate(R.layout.post_list_adapter, null);
        viewHolder = new ViewHolder();
        viewHolder.des = (TextView) convertView.findViewById(R.id.textView_des);
        viewHolder.like = (TextView) convertView.findViewById(R.id.tv_like);
        viewHolder.name = (TextView) convertView.findViewById(R.id.textView_name);
        viewHolder.dislike = (TextView) convertView.findViewById(R.id.tv_dislike);
        viewHolder.iv_photo = (ImageView) convertView.findViewById(R.id.imageView);
        viewHolder.iv_dislike = (ImageView) convertView.findViewById(R.id.iv_dislike);
        viewHolder.iv_like = (ImageView) convertView.findViewById(R.id.imageView_like);
        viewHolder.iv_pic = (CircleImageView) convertView.findViewById(R.id.profile_image);
        convertView.setTag(viewHolder);
    } else {
        viewHolder = (ViewHolder) convertView.getTag();
    }
    Picasso.with(context).load("url here").into(viewHolder.iv_photo);
    Picasso.with(context).load("url here").into(viewHolder.iv_pic);
    if (data.get(position).isLiked)
        viewHolder.iv_like.setColorFilter(Color.parseColor("#00ff00"));
    if (data.get(position).isDisliked)
        viewHolder.iv_dislike.setColorFilter(Color.parseColor("#00ff00"));
    viewHolder.des.setText(data.get(position).getPost_des());
    viewHolder.name.setText(data.get(position).getName());
    viewHolder.like.setText(data.get(position).getLikes());
    viewHolder.dislike.setText(data.get(position).getDislikes());
    viewHolder.iv_like.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            view.startAnimation(AnimationUtils.loadAnimation(context, R.anim.image_anim));
            if (data.get(position).isLiked) {
                data.get(position).setLiked(false);
                viewHolder.iv_like.setColorFilter(Color.parseColor("#000000"));
            } else if (data.get(position).isDisliked) {
                data.get(position).setLiked(true);
                data.get(position).setDisliked(false);
                viewHolder.iv_like.setColorFilter(Color.parseColor("#00ff00"));
                viewHolder.iv_dislike.setColorFilter(Color.parseColor("#000000"));
            } else {
                data.get(position).setLiked(true);

                viewHolder.iv_like.setColorFilter(Color.parseColor("#00ff00"));
            }


        }
    });
    viewHolder.iv_dislike.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            view.startAnimation(AnimationUtils.loadAnimation(context, R.anim.image_anim));
            if (data.get(position).isDisliked) {
                data.get(position).setDisliked(false);
                viewHolder.iv_dislike.setColorFilter(Color.parseColor("#000000"));
            } else if (data.get(position).isLiked) {
                data.get(position).setLiked(false);
                data.get(position).setDisliked(true);
                viewHolder.iv_like.setColorFilter(Color.parseColor("#000000"));
                viewHolder.iv_dislike.setColorFilter(Color.parseColor("#00ff00"));
            } else {
                data.get(position).setDisliked(true);

                viewHolder.iv_dislike.setColorFilter(Color.parseColor("#00ff00"));
            }
        }
    });
    return convertView;
}

除了setColorfilter,我的所有代码都正常工作。

4 个答案:

答案 0 :(得分:2)

看起来,当其他人重复使用该行时,您不会重置ColorFilter。

如何尝试这样做并查看它是否有效:

if (data.get(position).isLiked){
    viewHolder.iv_like.setColorFilter(Color.parseColor("#00ff00"));
}else{
    viewHolder.iv_like.setColorFilter(null);
}

if (data.get(position).isDisliked){
    viewHolder.iv_dislike.setColorFilter(Color.parseColor("#00ff00"));
}else{
    viewHolder.iv_dislike.setColorFilter(null);
}

答案 1 :(得分:1)

正如@pskink在评论部分告诉我的那样。

viewHolder.iv_like.setColorFilter(null);之后致电viewHolder.iv_dislike.setColorFilter(null)Picasso.with(context).load("url here").into(viewHolder.iv_pic);。 它工作了。

答案 2 :(得分:0)

尝试以下

viewHolder.iv_dislike.setColorFilter(ContextCompat.getColor(上下文,R.color.green_very_light));

答案 3 :(得分:0)

您应该使用imageview.getDrawable().setColorFilter(ContextCompat.getColor(context, R.color.black))

另外,不要忘记列表适配器中的else语句。