Я делаю приложение с классом ViewPager и адаптером FragmentStatePagerAdapter. Я читал, что разница между указанным адаптером и FragmentPagerAdapter заключается в том, что в дальнейшем все страницы хранятся сразу, а FragmentStatePagerAdapter имеет только 3 загруженных в памяти в любой момент времени.Ошибка памяти FragmentStatePagerAdapter
Итак, вот в чем проблема. У меня есть ViewPager с примерно 50 страницами. На каждой странице есть фрагмент с одним изображением ImageView (и некоторыми другими элементами). После прокрутки около 20 уникальных страниц, я обычно получаю ошибку «Из памяти». Итак, мой вопрос: как мне настроить FragmentStatePagerAdapter, чтобы иметь только 3 страницы, загруженные в память в любой момент времени? Это код для моего адаптера:
mViewPager.setAdapter(new FragmentStatePagerAdapter(fm) {
@Override
public Fragment getItem(int position) {
Song song = mSongs.get(position);
return PlayFragment.newInstance(position);
}
@Override
public int getCount() {
return mSongs.size();
}
@Override
public void destroyItem(View collection, int position, Object o) {
View view = (View)o;
((ViewPager) collection).removeView(view);
view = null;
}
@Override
public Object instantiateItem(View context, int position) {
ImageView imageView = new ImageView(getApplicationContext());
imageView.findViewById(R.id.albumimage);
imageView.setImageBitmap(BitmapFactory.decodeResource(getResources(), position));
((ViewPager) context).addView(imageView);
return imageView;
}
});
Методы destroyItem и instantiateItem в настоящее время ничего не делают. Я добавил их после прочтения об этом по чужому вопросу. На данный момент нет разницы, если у меня есть эти два метода в моем коде или нет.
Я читал другие вопросы, похожие на мои, но я, наконец, решил задать вопрос после попытки самостоятельно решить проблему без каких-либо хороших результатов.
Я попытался установить ImageView в null в onDestroy(), но ничего не произошло.