我正在使用的RecyclerView最初有一个带背景的imageView作为空心图像。触摸它时应该更改为fillheart图像。我使用RecyclerViewAdapter的getAdapterPosition()将这些检查位置添加到ArrayList,如果arraylist包含触摸,同样删除它position.but当我滚动它时,ImageView的背景会随机变换。
RecyclerAdapter:
public class ShopOfferRecycAdapter extends RecyclerView.Adapter<ShopOfferRecycAdapter.ShopOfferHolder> {
View view;int counter=0;ArrayList checkeditems;
@Override
public ShopOfferHolder onCreateViewHolder(ViewGroup parent, int viewType) {
view= LayoutInflater.from(parent.getContext()).inflate(R.layout.shop_offers_recycler_adapter,parent,false);
return new ShopOfferHolder(view);
}
@Override
public void onBindViewHolder(ShopOfferHolder holder, int position) {
DisplayImageOptions options = new DisplayImageOptions.Builder().showImageOnLoading(R.drawable.mobile)
.showImageForEmptyUri(R.drawable.mobile).showImageOnFail(R.drawable.mobile).cacheInMemory(true).cacheOnDisk(true)
.considerExifParams(true).bitmapConfig(Bitmap.Config.RGB_565).build();
ImageLoader.getInstance().displayImage("http://dress-trends.com/wp-content/uploads/2015/10/Fashion-clothing-for-men-spring-summer-2016-61.jpg",holder.imageView,options);
}
@Override
public int getItemCount() {
return 10;
}
public class ShopOfferHolder extends RecyclerView.ViewHolder{
ImageView imageView,fav;
public ShopOfferHolder(View itemView) {
super(itemView);
checkeditems=new ArrayList();
imageView=(ImageView) itemView.findViewById(R.id.product_img);
fav=(ImageView) itemView.findViewById(R.id.fav);
fav.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(checkeditems.size()>0&&checkeditems.contains(getAdapterPosition()+1)==true) {
checkeditems.remove(getAdapterPosition()+1);
fav.setImageResource(R.drawable.heartnofill);
Log.e("Position removed", Integer.toString(getAdapterPosition()+1));
}
else if(checkeditems.contains(getAdapterPosition())==false){
fav.setImageResource(R.drawable.heartfill);
checkeditems.add(getAdapterPosition()+1);
Log.e("Pos added",Integer.toString(getAdapterPosition()+1));
// if(checkeditems.contains(getAdapterPosition()){
// checkeditems.remove(getAdapterPosition());
// Log.e("Position removed",Integer.toString(getAdapterPosition()));
}
return false;
}
});
}
}
}
答案 0 :(得分:2)
在onBindViewHolder
中,您将图片加载到ImageView
这样使用holder.imageView.setImageBitmap(null)
。这将重置ImageView并立即刷新以前使用的Image。
holder.imageView.setImageBitmap(null);
ImageLoader.getInstance().displayImage("http://dress-trends.com/wp-content/uploads/2015/10/Fashion-clothing-for-men-spring-summer-2016-61.jpg",holder.imageView,options);
答案 1 :(得分:1)
在你的onBindViewHolder方法中试试这个
holder.setIsRecyclable(false);
正如您可以通过该方法的名称理解的那样,这将告诉您的回收者视图停止回收您的视图持有者。
在某些情况下,这可能会导致性能问题
但是看看上面代码片段中的getCount方法,你似乎有更少的元素要处理:)