Скажем, у меня есть viewpager с несколькими фрагментами, которые содержат растровые изображения. Я использую setOffScreenLimit(numberOfPagesInViewPager)
, чтобы убедиться, что фрагменты мгновенно доступны в любое время (это требование моего приложения). Вполне очевидно, что чем больше фрагментов у меня есть, тем больше памяти я буду использовать из-за растровых изображений внутри фрагментов и фрагментов, хранящихся в памяти.Как повторно использовать фрагменты в viewpager в Android?
Теперь предположим, что эти фрагменты показывают одинаковое содержимое и, следовательно, содержат одинаковые растровые изображения.
Можно ли создать только один фрагмент и повторно использовать его в viewpager для всех страниц (и, следовательно, уменьшить объем памяти до 1 фрагмента)?
В коде я имею в виду что-то вроде этого:
public class MyAdapter extends FragmentPagerAdapter {
private MyFragment mFragment;
public MyAdapter(FragmentManager fragmentManager) {
super(fragmentManager);
mFragment = MyFragment.newInstance();
}
@Override
public Fragment getItem(int position) {
// Reuse mFragment for all pages in the viewpager
return mFragment;
}
}
Этот подход не работает, однако, как я получаю этот тип ошибки:
java.lang.IllegalStateException: Can't change tag of fragment MyFragment{4259a4d0 id=0x7f0a0074 android:switcher:2131361908:0}: was android:switcher:2131361908:0 now android:switcher:2131361908:1