В настоящее время с 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);
}
}
}
Однако я сталкиваюсь со странным поведением во время переключения.
- Показан фрагмент черного цвета.
- Переключение.
- Просмотр пейджера, который может перемещаться между показанными фиолетовыми и синими фрагментами.
- Переключение.
- Показан фрагмент черного цвета.
- Переключение.
- Ничего не показано, так как метод getItem MyFragmentPagerAdapter не запускается.
Я думаю, что моя ситуация похожа на FragmentPagerAdapter getItem не вызывается
Однако я предпочитаю не использовать FragmentStatePagerAdapter
из-за потенциально больших накладных расходов при переключении между страницами.
Любое обходное решение для решения этой проблемы?
Я привожу полный работоспособный исходный код, чтобы продемонстрировать эту проблему: https://www.dropbox.com/s/jok9tz5ktvfcteo/viewpagerbug.zip