View Pager with Universal Image Loader Out of Memory Error

后端 未结 7 1723
别跟我提以往
别跟我提以往 2021-02-02 01:58

I am not really sure if a ViewPager with Universal Image Loader can/should be used as an alternate for a gallery like interface since I have run into an Out of Memory error whil

7条回答
  •  Happy的楠姐
    2021-02-02 02:05

    I also used the same library and had same error. As solution, i created a sparseArray to keep photoView instances. And use it like this:

     private SparseArray photoViewHolder;
    
     @Override
     protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
           ...
    
           photoViewHolder = new SparseArray();
           ...
     }
    
    private class GalleryPagerAdapter extends PagerAdapter {
    
    @Override
    public View instantiateItem(ViewGroup container, int position) { 
    
            PhotoView photoView = new PhotoView(container.getContext());
    
            ImageHolder holder = new ImageHolder();
            holder.position = position;
            holder.loaded = false;
    
            photoView.setTag(holder);
            photoViewHolder.put(position, photoView);
    
                        // I used LazyList loading
            loader.DisplayImage(items.get(position), photoView);
    
            // Now just add PhotoView to ViewPager and return it
            container.addView(photoView, LayoutParams.MATCH_PARENT,
                    LayoutParams.MATCH_PARENT);
    
            return photoView;
        }
    
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((View) object);
        photoViewHolder.remove(position);
    }
    
    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }
    
    }
    

    And to handle viewPager's listener:

       pager.setOnPageChangeListener(new OnPageChangeListener() { 
    
        @Override
        public void onPageScrollStateChanged(int position) { 
    
        } 
    
        @Override
        public void onPageScrolled(int position, float arg1, int arg2) { 
    
        } 
    
        @Override
        public void onPageSelected(int position) { 
            if(photoViewHolder.get(position) != null) {
                ImageHolder holder = (ImageHolder)photoViewHolder.get(position).getTag();
                // Do something...
            }
        } 
    });
    

    Hope this helps...

提交回复
热议问题