如何保存片段的当前状态



在我的MainActivity中,我有一个底部菜单和一个FrameLayout。 每个底部使用下面的代码加载特定的片段:

bottomNavigation.setOnClickMenuListener {
when (it.id) {
1 -> supportFragmentManager.beginTransaction()
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.replace(R.id.frame, ProfileFragment())
.commit()
2 -> supportFragmentManager.beginTransaction()
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
.replace(R.id.frame, MyCalendarFragment())
.commit()

3 -> supportFragmentManager.beginTransaction()
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
.replace(R.id.frame, ScoreFragment())
.commit()
}

}

问题是旅行到其他片段后,旧的片段状态将被消除, 如何保存当前片段的状态并在返回此片段时加载它。

我不太确定这是否可行,但无法发表评论,因为我的代表不够高。您可以懒惰地创建片段并保留引用:

private val profileFragment: ProfileFragment by lazy {
ProfileFragment()
}

因为目前每次替换内容时都会创建一个新实例。 这意味着您的替换将如下所示:

supportFragmentManager.beginTransaction()
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.replace(R.id.frame, profileFragment)
.commit()

最新更新