如何修复片段不是活动片段错误



我使用底部导航在片段之间切换时遇到问题 view.it 首先加载,我可以第一次在片段之间切换,但如果片段已经加载并尝试导航回它。我的应用程序崩溃,显示我在下面列出的错误。

这是我的代码

private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener{
when (it.itemId) {
R.id.vegetables -> {
showFragment(VegetablesFragment(),VegetablesFragment().javaClass.simpleName)return@OnNavigationItemSelectedListener true
}
R.id.fruits -> {
showFragment(FruitsFragment(),FruitsFragment().javaClass.simpleName)
return@OnNavigationItemSelectedListener true
}
R.id.grocery -> {
showFragment(GroceryFragment(),GroceryFragment().javaClass.simpleName)
return@OnNavigationItemSelectedListener true
}
else -> return@OnNavigationItemSelectedListener false
}
}
private fun showFragment(fragment : Fragment ,fragmentName :String) {
val transaction = manager.beginTransaction()
val currentFragment = manager.primaryNavigationFragment
if (currentFragment != null) {
transaction.hide(currentFragment)
}
val fragmentTemp = manager.findFragmentByTag(fragmentName)
if (fragmentTemp == null){
transaction.add(R.id.fragmentHolder,fragment,fragmentName)
Log.d("ac1001","case 2")
} else {
Log.d("ac1001","case 1")
transaction.show(fragment)
}
transaction.setPrimaryNavigationFragment(fragment)
transaction.setReorderingAllowed(true)
transaction.commitNowAllowingStateLoss()
}

错误:

java.lang.IllegalArgumentException: Fragment VegetablesFragment{d4a075d (f9739b50-c0fc-47c1-80d1-dc413ffd5a09)} is not an active fragment of FragmentManager FragmentManager{5b1a8d2 in HostCallbacks{2810da3}}

我尝试到处搜索,但找不到答案。

错误发生在我的事务上。

提前谢谢。

尝试使用此代码。 将 showFragment 函数更改为 ->

fun showFragment(fragment: Fragment ,fragmentName :String) {
val transaction = supportFragmentManager.beginTransaction()
transaction.replace(R.id.fragmentHolder, fragment)
transaction.addToBackStack(fragmentName)
transaction.commit()
}

希望这对您有所帮助。

通过将我的代码更改为:

private fun showFragment(fragment : Fragment ,fragmentName :String) {
val transaction = manager.beginTransaction()
val currentFragment = manager.primaryNavigationFragment
if (currentFragment != null) {
transaction.hide(currentFragment)
}
val fragmentTemp = manager.findFragmentByTag(fragmentName)
if (fragmentTemp == null){
transaction.add(R.id.fragmentHolder,fragment,fragmentName)
} else {
transaction.show(fragmentTemp)
}
transaction.setPrimaryNavigationFragment(fragmentTemp)
transaction.setReorderingAllowed(true)
transaction.commitNowAllowingStateLoss()
}