Android setColorFilter在自定义列表适配器中无法正常工作?
已经3-4个小时了,我仍然不知道为什么我的imageView的颜色会自动改变,我几乎做了所有的事情。下面是customListAdapter的getView代码Android setColorFilter在自定义列表适配器中无法正常工作?,android,Android,已经3-4个小时了,我仍然不知道为什么我的imageView的颜色会自动改变,我几乎做了所有的事情。下面是customListAdapter的getView代码 @Override public View getView(final int position, View convertView, @NonNull ViewGroup parent) { final ViewHolder viewHolder; if (convertView == null) {
@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外,我的所有代码都正常工作。请尝试下面的内容
viewHolder.iv_loke.setColorFilter(ContextCompat.getColor(context,R.color.green_very_light)) 试试下面
viewHolder.iv_loke.setColorFilter(ContextCompat.getColor(context,R.color.green_very_light)) 当其他行重复使用该行时,您似乎没有重置颜色过滤器 试试这样做,看看效果如何:
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);
}
当其他行重复使用该行时,似乎不重置颜色过滤器 试试这样做,看看效果如何:
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);
}
您应该使用
imageview.getDrawable().setColorFilter(ContextCompat.getColor(context,R.color.black))
另外,不要忘记列表适配器中的else语句。您应该使用
imageview.getDrawable().setColorFilter(ContextCompat.getColor(context,R.color.black))
另外,不要忘记列表适配器中的else语句。正如@pskink在评论部分告诉我的那样 刚刚调用了
viewHolder.iv_like.setColorFilter(null)代码>和viewHolder.iv\u.setColorFilter(null)
在Picasso.with(context)之后。加载(“此处的url”)。到(viewHolder.iv\u pic)代码>。
正如@pskink在评论部分告诉我的那样,它成功了
刚刚调用了viewHolder.iv_like.setColorFilter(null)代码>和viewHolder.iv\u.setColorFilter(null)
在Picasso.with(context)之后。加载(“此处的url”)。到(viewHolder.iv\u pic)代码>。
它成功了。显示实际结果和预期结果。或者至少显示实际结果,并解释错误。调用viewHolder.iv_like.setColorFilter(null);viewHolder.iv_unlike.setColorFilter(null)
紧接着两个Picasso.with(…)
callsThanks@pskink。。它起作用了…-)很好,您也可以在前两个if
s的else
分支中调用setColorFilter(null)
,但是…显示实际结果和预期结果。或者至少显示实际结果,并解释错误。调用viewHolder.iv_like.setColorFilter(null);viewHolder.iv_unlike.setColorFilter(null)
紧接着两个Picasso.with(…)
callsThanks@pskink。。它起作用了…-)很好,您也可以在前两个if
s的else
分支中调用setColorFilter(null)
,但是……您能详细说明一下吗?我试过了,但没用。你能详细说明一下吗?我试过了,但没用。