【发布时间】:2020-04-16 08:32:34
【问题描述】:
我正在尝试显示/隐藏片段。它在大多数情况下都可以正常工作,但很少发生崩溃 java.lang.IllegalStateException: Cannot show Fragment attach to a different FragmentManager。
我有一个在 Activity 中显示/隐藏片段的功能。
private var previousFragment: Fragment? = null
private fun replaceFragment(fragment: Fragment) {
val backStateName = fragment.javaClass.name
val fragmentManager = supportFragmentManager
val fragmentTransaction = fragmentManager.beginTransaction()
if (!fragment.isAdded) {
if (fragmentManager.findFragmentByTag(backStateName) == null) {
fragmentTransaction
.add(R.id.fragmentContainerView, fragment, backStateName)
}
}
if (previousFragment != null)
fragmentTransaction.hide(previousFragment!!)
fragmentTransaction.show(fragment)
fragmentTransaction.commitAllowingStateLoss()
previousFragment = fragment
}
这里有什么问题?
【问题讨论】:
-
首先为什么要使用add而不是replace?
-
因为我在activity中使用了BottomNavigationView
-
我也使用了底部导航,当我想替换片段时,我从来不需要使用添加。
-
你能告诉我代码和添加有什么问题吗?
-
我在片段中有滚动视图,如果我使用替换,则片段滚动回顶部,但如果我使用添加,则 scollview 没有问题