Я пытаюсь создать приложение с 4 вкладками, используя FragmentStatePagerAdapter и ViewPager.
Когда я впервые запускаю приложение и если я выбираю вкладки по порядку (от 0 до 3), все идет нормально, затем, если я пытаюсь выполнить обратный путь (от 3 до 0), вкладка 1 показывает пустой экран, если после этого я выберите вкладку 2, затем также будет пусто, если я перейду на вкладку 0 и снова проделаю путь, вкладка 2 вернется к жизни, а несколько раз вкладка 1 вернется к жизни, но я не нашел никакой последовательности ...
Я знаю, что это беспорядок ... Дело в том, что вкладка 1 используется для сбоя, вкладка 2 несколько раз терпит неудачу, а вкладки 0 и 3 всегда работают нормально. Если я поменяю положение фрагментов, все будет одинаково, некоторые, я думаю, не связаны с кодом фрагментов...
Ошибок в логкате нет, отладка фрагментов показывает, что все идет как надо...
Я несколько дней пытался это исправить, но безуспешно (очевидно...), я пытался переопределить getItemPosition(), чтобы вернуть POSITION_NONE, я попытался сделать свой собственный FragmentStatePagerAdapter, как здесь, скажем http://speakman.net.nz/blog/2014/02/20/a-bug-in-and-a-fix-for-the-way-fragmentstatepageradapter-handles-fragment-restoration/ но ничего... И еще некоторые вещи, которые не работали для меня.
Немного кода: Основной класс
public class Main extends FragmentActivity implements ActionBar.TabListener {
private MyPageAdapter mPagerAdapter;
private ViewPager mPager;
@Override
protected void onCreate(Bundle si) {
super.onCreate(si);
setContentView(R.layout.activity_main);
init();
}
private void init() {
final ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
if (mPagerAdapter == null) {
mPagerAdapter = new PaginaAdapter(getSupportFragmentManager());
mPager = (ViewPager) findViewById(R.id.pager);
mPager.setAdapter(mPagerAdapter);
mPager.requestTransparentRegion(mPager);
mPager.setOnPageChangeListener(new viewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
actionBar.setSelectedNavigationItem(position);
}
});
// Tab creation
for (int i = 0; i < mPagerAdapter.getCount(); i++) {
View tabView = getLayoutInflater().inflate(R.layout.tab, null);
((ImageView) tabView.findViewById(R.id.tabIcon))
.setImageDrawable(getResources().getDrawable(mPagerAdapter.getIcon(i)));
actionBar.addTab(actionBar.newTab().setCustomView(tabView).setTabListener(this));
}
}
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
mPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
}
Адаптер
public class MyPageAdapter extends FragmentStatePagerAdapter {
public MyPageAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
Fragment fragment = null;
switch (position) {
case 0:
fragment = new InitFragment();
break;
case 1:
fragment = new MusicFragment();
break;
case 2:
fragment = new VideoFragment();
break;
case 3:
fragment = new PicFragment();
break;
}
return fragment;
}
@Override
public int getCount() {
return 4;
}
....
}
Спасибо.
ОБНОВЛЕНИЕ: Мои фрагменты находятся в отдельных классах и не статичны, это важно? Еще одна вещь, которую я только что понял, это то, что кажется, что фрагмент уничтожается после того, как я коснусь вкладки, потому что, если я медленно прокручиваю, я вижу фрагмент, но внезапно все исчезает.