Недостаточно памяти Исключение с использованием Picasso

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

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 раза от первого изображения до последнего, изображения больше не отображаются, и у меня не хватает памяти в журналах. Помогите мне, пожалуйста!!!


person sofi37    schedule 14.05.2015    source источник


Ответы (1)


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

Итак, теперь я делаю следующее:

 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);
    }
}
person sofi37    schedule 15.05.2015