1

Мне нужно показать изображения в виде пейджера. Чтобы показать изображение в представлении изображения, я использую библиотеку Picasso. Также я изменяю размер изображения, используя размер экрана.
Так что в моей деятельности в OnCreate я получил вид пейджер:Недостаточно памяти Исключение с использованием Picasso

mPager=(ViewPager)findViewById(R.id.pager); mPagerAdapter = new ScreenSlidePagerAdapter(); mPager.setAdapter(mPagerAdapter);

Затем получить размер устройства:

Display display = getWindowManager().getDefaultDisplay(); 
    Point size = new Point(); 
    display.getSize(size); 
    screenWidth = size.x; 
    screenHeight = size.y; 

А вот моя страница адаптер:

private class ScreenSlidePagerAdapter extends PagerAdapter { 
    PhotoViewAttacher attacher; 

    @Override 
    public void destroyItem(View collection, int position, Object o) { 
     View view = (View) o; 
     ((ViewPager) collection).removeView(view); 
     view = null; 
    } 

    @Override 
    public void finishUpdate(View arg0) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public int getCount() { 
     return Constants.imageUrls.size(); 
    } 

    @Override 
    public Object instantiateItem(View context, int position) { 

     LayoutInflater ltInflater = getLayoutInflater(); 
     View view = ltInflater.inflate(R.layout.page_fragment, null, false); 
     final ImageView imageView = (ImageView)view.findViewById(R.id.image); 
     attacher = new PhotoViewAttacher(imageView); 
     attacher.setZoomable(true); 

     Picasso.with(MainActivity.this).setIndicatorsEnabled(true); 
     Picasso.with(MainActivity.this) 
       .load(Constants.imageUrls.get(position)) 
       .resize(screenWidth, screenHeight).centerInside() 
       .into(imageView, new com.squareup.picasso.Callback() { 
        @Override 
        public void onSuccess() { 
         if (attacher != null) { 
          attacher.update(); 
         } else { 
          attacher = new PhotoViewAttacher(imageView); 
         } 
        } 

        @Override 
        public void onError() { 
         // TODO Auto-generated method stub 
         int i = 0; 
        } 
       }); 

       ((ViewPager) context).addView(view); 
     return view; 
    } 

    @Override 
    public boolean isViewFromObject(View view, Object object) { 
     return view == ((View) object); 
    } 

    @Override 
    public void restoreState(Parcelable arg0, ClassLoader arg1) { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public Parcelable saveState() { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public void startUpdate(View arg0) { 
     // TODO Auto-generated method stub 

    } 

} 

Проблема заключается в том, что когда я прокручиваю 3 раза от первого изображения до последнего, то изображения больше не отображаются, и у меня не хватает памяти в l OGS. Пожалуйста, помогите мне!!!

ответ

0

Я нашел проблему. Это было потому, что каждый раз, когда я создавал новый вид.

Так что теперь мне делать дальше:

list= createListOfImages(); 
    mPager=(ViewPager)findViewById(R.id.pager); 
    mPagerAdapter = new ScreenSlidePagerAdapter(list); 
    mPager.setAdapter(mPagerAdapter); 

И мой адаптер:

private class ScreenSlidePagerAdapter extends PagerAdapter { 
    List<View> pages; 

    public ScreenSlidePagerAdapter(List<View> pages){ 
     this.pages=pages; 
    } 

    @Override 
    public void destroyItem(ViewGroup container, int position, Object object) { 
     container.removeView(pages.get(position)); 
    } 

    @Override 
    public int getCount() { 
     return Constants.imageUrls.size(); 
    } 

    @Override 
    public Object instantiateItem(ViewGroup container, int position) { 
     Log.i(TAG,"show image "+position); 
     View v = pages.get(position); 
     container.addView(v); 
     return v; 
    } 

    @Override 
    public boolean isViewFromObject(View view, Object object) { 
     return view == ((View) object); 
    } 

    @Override 
    public void restoreState(Parcelable arg0, ClassLoader arg1) { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public Parcelable saveState() { 
     // TODO Auto-generated method stub 
     return null; 
    } 
} 

И для изображения курсе я следующий:

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    for (int i=0;i<Constants.imageUrls.size();i++){ 
     ImageView imageView = (ImageView)list.get(i).findViewById(R.id.image); 
     imageView.setImageDrawable(null); 
    } 
}