【问题标题】:java.lang.IllegalStateException: Fragment already added: Fragment1 with FragmentStatePagerAdapterjava.lang.IllegalStateException:已添加片段:带有 FragmentStatePagerAdapter 的 Fragment1
【发布时间】:2020-04-08 13:39:18
【问题描述】:

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

【问题讨论】:

    标签: android android-fragments kotlin fragmentstatepageradapter


    【解决方案1】:

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

    【讨论】:

    • 在适配器外部创建片段之前。这不是问题的原因
    • @RajasekaranM 你确定你不会创建实例片段吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多