Я использовал FragmentStatePagerAdapter
для Viewpager
, и он работает нормально, если я устанавливаю адаптер перед вызовом API. Если через некоторое время я устанавливаю адаптер, я получаю исключение (я устанавливаю адаптер только один раз).
На самом деле я не знаю, какова точная проблема и решение.
Пожалуйста, проверьте приведенный ниже код для справки
Адаптер:
class MyPagerAdapter(
private val context: Context,
fm: FragmentManager,
private val event: EventInfoResponse
) :
FragmentPagerAdapter(fm,
BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT
) {
private val fragmentsList = arrayListOf<Fragment>()
val fragmentTitleList = arrayListOf<String>()
override fun getItem(position: Int): Fragment {
return when (position) {
0 -> Fragment1.newInstance(event)
else -> Fragment2.newInstance(event.id!!)
}
}
override fun getCount(): Int {
return 2
}
override fun getPageTitle(position: Int): CharSequence? {
return when (position) {
0 -> "title 1"
else -> "title 2"
}
}
}
Применение адаптера:
vpEvent.apply {
adapter = MyPagerAdapter(requireContext(),childFragmentManager,event!!)
tlEvent.setupWithViewPager(this)
}
Исключение:
java.lang.IllegalStateException: Fragment already added: Fragment1{9b6bafd (10e16e31-8262-4161-aeff-c78e1180030f) id=0x7f0a065f android:switcher:2131363423:0}
at androidx.fragment.app.FragmentManagerImpl.addFragment(FragmentManagerImpl.java:1379)
at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:399)
at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManagerImpl.java:2079)
at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java:1869)