错误信息
java.lang.IllegalStateExceptionFailure
saving state: active ResultFragment{5f42f00} has cleared index: -1android.support.v4.app.FragmentManagerImpl.saveAllState(FragmentManager.java:2960)
报错场景
多个Activity添加同一个Fragment实例时报错:
image
报错代码
val fragmentTransaction = activity.supportFragmentManager.beginTransaction()
if (fragment.isAdded) {
fragmentTransaction
.detach(fragment)
.attach(fragment)
.commit()
} else {
fragmentTransaction
.add(fragment, "fragmentTag")
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
.attach(fragment)
.commit()
}
解决方案
在add()前判断当前Activity之前是否添加过该Fragment, 如果添加过, 先remove()
val fragmentTransaction = activity.supportFragmentManager.beginTransaction()
val exist = activity.supportFragmentManager.fragments.indexOf(fragment) != -1
if (fragment.isAdded) {
fragmentTransaction
.detach(fragment)
.attach(fragment)
.commit()
} else {
if (exist) fragmentTransaction.remove(fragment)
fragmentTransaction
.add(fragment, "fragmentTag")
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
.attach(fragment)
.commit()
}