当前位置 : 主页 > 编程语言 > java >

【Android】关于Activity压后台Fragment重叠的问题

来源:互联网 收集:自由互联 发布时间:2022-06-30
关于Activity压后台Fragment重叠的问题 How To Solve? ​​利用savedInstanceState,记录当前fragment的index​​ override fun onSaveInstanceState(outState: Bundle) { outState.putInt(SAVED_CURRENT_ID, _currentItemIndex) super.o


关于Activity压后台Fragment重叠的问题


【Android】关于Activity压后台Fragment重叠的问题_ide

How To Solve?

​​利用savedInstanceState,记录当前fragment的index​​

override fun onSaveInstanceState(outState: Bundle) {
outState.putInt(SAVED_CURRENT_ID, _currentItemIndex)
super.onSaveInstanceState(outState)
}

​​在onCreate中获取savedInstanceState中的index​​

companion object {
private const val SAVED_CURRENT_ID = "SAVED_CURRENT_ID"
}

private val vb by lazy { ActivityTabkBottomFragmentBinding.inflate(layoutInflater) }
private var _currentItemIndex = 0

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(vb.root)

savedInstanceState?.let {
_currentItemIndex = savedInstanceState.getInt(SAVED_CURRENT_ID)//从savedInstanceState中获取index
}

...
}

​​最后塞给adapter​​

/**
* 实例化以及显示指定位置的fragment
* @param container View
* @param position Int
*/
fun instantiateItem(container: View, position: Int) {
val currentTransaction: FragmentTransaction = _fragmentManager.beginTransaction()
if (_currentFragment != null) {
currentTransaction.hide(_currentFragment!!)
}
val name = container.id.toString() + ":" + position
var fragment: Fragment? = _fragmentManager.findFragmentByTag(name)
if (fragment != null) {
currentTransaction.show(fragment)
} else {
fragment = getItem(position)
if (fragment != null && !fragment.isAdded) {
currentTransaction.add(container.id, fragment, name)
}
}
_currentFragment = fragment
currentTransaction.commitAllowingStateLoss()
}


网友评论