В настоящее время с FragmentActivity
я переключаюсь между двумя типами фрагментов, используя следующий код.
private void toggle() {
Fragment oldFragment = getSupportFragmentManager().findFragmentById(R.id.content);
Fragment fragment = null;
if (oldFragment instanceof ColorFragment) {
fragment = new ViewPagerFragment();
} else {
fragment = new ColorFragment(android.R.color.black);
}
getSupportFragmentManager().beginTransaction().replace(R.id.content, fragment).commitAllowingStateLoss();
}
2 Фрагменты переключаются.
- ColorFragment. Простой фрагмент, который заполняет его фон сплошным черным цветом.
- ViewPagerFragment - фрагмент содержит
ViewPager
. Пользователь может прокручивать между фиолетовым фрагментом цвета и фрагментом синего цвета.
Код, который отвечает за прокрутку фиолетовых и синих цветовых фрагментов, приведен ниже.
private static class MyFragmentPagerAdapter extends FragmentPagerAdapter {
public MyFragmentPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return 2;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new ColorFragment(android.R.color.holo_purple);
default:
return new ColorFragment(android.R.color.holo_blue_bright);
}
}
}
Тем не менее, я сталкиваюсь с странным поведением при переключении.
- Был показан фрагмент черного цвета.
- Переключение.
- Просмотр пейджера, который можно прокручивать между фиолетовыми и синими фрагментами.
- Переключение.
- Был показан фрагмент черного цвета.
- Переключение.
- Ничего не отображается, поскольку MyFragmentPagerAdapter getItem не запускается.
Я думаю, что моя ситуация похожа на FragmentPagerAdapter getItem не вызывается
Однако я предпочитаю не использовать FragmentStatePagerAdapter
из-за стоимости потенциально большего количества накладных расходов при переключении между страницами.
Любое обходное решение для решения этой проблемы?
Я включаю полный работоспособный исходный код для демонстрации этой проблемы: https://www.dropbox.com/s/jok9tz5ktvfcteo/viewpagerbug.zip