У мене є робота з двома фрагментами. Діяльність починається з показу завантажувача під час завантаження об’єкта. Потім завантажений об'єкт передається обом фрагментам як аргументи за допомогою методів newInstance, і ці фрагменти приєднуються.
final FragmentTransaction trans = getSupportFragmentManager().beginTransaction();
trans.replace(R.id.container1, Fragment1.newInstance(loadedObject));
trans.replace(R.id.container2, Fragment2.newInstance(loadedObject));
trans.commit();
Другий фрагмент містить android.support.v4.view.ViewPager та вкладки. onResume ми ініціалізуємо це наступним чином
viewPager.setAdapter(adapter);
viewPager.setOffscreenPageLimit(adapter.getCount()); //the count is always < 4
tabLayout.setupWithViewPager(viewPager);
Проблема в тому, що андроїд потім кидає
java.lang.IllegalStateException: FragmentManager вже виконує транзакції
За допомогою цього трасування стека: (Я взявandroid.support
з пакета імена лише для стислості)
v4.app. .populate (ViewPager.java:1235) на v4.view.ViewPager.populate (ViewPager.java:1083) на v4.view.ViewPager.setOffscreenPageLimit (ViewPager.java:847)
Дані показують, якщо setOffscreenPageLimit(...);
видалено. Чи є інший спосіб уникнути цієї проблеми?
Коли в життєвому циклі транзакція фрагмента завершена, щоб я міг зачекати, щоб налаштувати пейджер?
ViewPager
підвищитьNullPointerException
внутрішнюonCreateView
частину фрагмента всередині пейджера доIllegalStateException : FragmentManager is already executing transactions
... на всякий випадок, якщо хтось заїде і йому знатиметься