В моем приложении для Android есть одно действие с контроллером вкладок, на котором размещены 4 вкладки — каждая вкладка представлена фрагментом. Когда я запускаю приложение на своем тестовом устройстве под управлением ОС 4.03, приложение работает, и я могу переходить на разные вкладки и т. д. Когда приложение запускается на устройстве с ОС 4.3, приложение аварийно завершает работу во время запуска с IllegalStateException: Fragment уже добавлен : MyFirstTabFragment.
Вот трассировка стека:
Проблема, по-видимому, вызвана попыткой добавить фрагменты в FragmentTransaction в методе getItem() моего расширенного класса FragmentStatePagerAdapter следующим образом:
Причина, по которой я вызываю add(), заключается в том, что я могу связать тег с моими фрагментами, чтобы позже получить доступ к этим фрагментам, чтобы вызвать метод для этих экземпляров фрагментов, когда вкладки выбраны/не выбраны.
public class MyFragmentStatePagerAdapter extends android.support.v13.app.FragmentStatePagerAdapter {
@Override
public Fragment getItem(int position) {
if (position == 0) {
Fragment fragment = new MyFirstTabFragment();
getFragmentManager().beginTransaction().add(fragment, "MyFirstTabFragmentTag").commit();
// getFragmentManager().beginTransaction().replace(R.id.pager, fragment, "MyFirstTabFragmentTag").commit();
return fragment;
} else if (position == 1) {
Fragment fragment = new MySecondTabFragment();
getFragmentManager().beginTransaction().add(fragment, "MySecondTabFragmentTag").commit();
// getFragmentManager().beginTransaction().replace(R.id.pager, fragment, "MySecondTabFragmentTag").commit();
return fragment;
}
}
.
.
.
}
Я просмотрел различные сообщения об исключении IllegalStateException и пробовал различные предложения, включая вызов replace() вместо add(), вызов remove(), затем add(), вызов MyFirstTabFragment.instantiate() вместо new MyFirstTabFragment(), и ни один из этих изменения исправили проблему.
Я подозреваю, что я могу выполнять эту FragmentTransaction слишком рано в процессе, поскольку ViewPager в настоящее время находится в процессе добавления фрагментов, когда я пытаюсь добавить или заменить фрагмент своим тегом. Есть ли у кого-нибудь лучшее понимание этого процесса? Есть ли лучшее место, где я могу сделать эти отдельные вызовы add(), чтобы пометить свои фрагменты?
Спасибо заранее за любые предложения!
Так что просто для завершения этой темы...