java.lang.IollegalStateException:已添加片段:具有FragmentStatePagerA



我已经将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)

问题是您直接在Adapter中实例化Fragment。您应该从Adapter外部创建片段的实例,并注入到Adapter,然后通过getItem()方法引入‍‍‍‍‍‍‍创建CCD_ 8到CCD_。

最新更新