已经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,我的所有代码都正常工作。
答案 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语句。