报错 java.lang.IllegalStateException: commit already called

来源:5-8 实践:自定义实现多Tab底部导航栏页面就结构(二)

慕运维0750787

2021-07-21 14:41

    private fun switchFragment(selectIndex: Int) {
        if (tab1Fragment == null) {
            tab1Fragment = StudyFragment()
            //           添加参数
            addBundleToFragment(tab1Fragment!!, "tab1")
        }
        if (tab2Fragment == null) {
            tab2Fragment = StudyFragment()
            //            添加参数
            addBundleToFragment(tab2Fragment!!, "tab2")
        }
        if (tab3Fragment == null) {
            tab3Fragment = StudyFragment()
            //            添加参数
            addBundleToFragment(tab3Fragment!!, "tab3")
        }
//获取fragment对象
        val fragment: Fragment? = when (selectIndex) {
            0 -> {
                tab1Fragment
            }
            1 -> {
                tab2Fragment
            }
            2 -> {
                tab3Fragment
            }
            else -> {
                throw IllegalStateException("${selectIndex}下标不符合预期")
            }
        } ?: return        //如果fragment为空,则返回
//        切换fragment显示

        if (fragment != null) {
            if (!fragment.isAdded) {
                fragmentTransaction.add(R.id.fragment_container, fragment)//添加fragment
            }
            fragmentTransaction.show(fragment)//显示fragment
        }
        //   隐藏之前显示的shownFragment,以多个Fragemnt重叠
        if (shownFragment != null) {
            fragmentTransaction.hide(shownFragment!!)
        }
        shownFragment = fragment//设置当前显示的为fragment
        fragmentTransaction.commitAllowingStateLoss()//提交业务
    }

报错指向这一行:

    fragmentTransaction.commitAllowingStateLoss()//提交业务

整个文件只有这一个提交业务 ,为什么说已经called

写回答 关注

1回答

  • 慕运维0750787
    2021-07-21 15:08:35
    val fragmentTransaction = supportFragmentManager.beginTransaction() 这个必须定义为局部变量,若定义为全局变量,只能提交一次。


2021Android从零入门到实战(Kotlin版)

移动端大牛带你快速入门Android

18954 学习 · 74 问题

查看课程

相似问题