首页 文章

RecyclerView中的android ImageView以随机位置加载相同的图像

提问于
浏览
2

我正在使用的RecyclerView最初有一个带背景的imageView作为空心图像 . 触摸它时应该更改为fillheart图像 . 我使用RecyclerViewAdapter的getAdapterPosition()将这些检查位置添加到ArrayList,并且如果arraylist包含触摸位置,同样将其删除 . 当我滚动它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;

                }

            });
        }
    }
}

2 回答

  • 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

    在你的onBindViewHolder方法中试试这个

    holder.setIsRecyclable(false);
    

    正如您可以通过方法的名称理解的那样,这将告诉您的回收站视图停止回收您的视图持有者 .

    在某些情况下,这可能会导致性能问题

    但是看看上面代码片段中的getCount方法,你似乎有更少的元素要处理:)

相关问题