Android fragments 如何保存片段的当前状态
在我的主要活动中,我有一个底部菜单和一个框架布局。 每个底部使用下面的代码加载特定片段:Android fragments 如何保存片段的当前状态,android-fragments,kotlin,Android Fragments,Kotlin,在我的主要活动中,我有一个底部菜单和一个框架布局。 每个底部使用下面的代码加载特定片段: bottomNavigation.setOnClickMenuListener { when (it.id) { 1 -> supportFragmentManager.beginTransaction() .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
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()
}
}
问题是在移动到其他片段后,旧片段状态将被消除,
我如何保存当前片段的状态并在返回此片段时加载它。我不太确定这是否可行,但无法评论,因为我的代表级别不够高。您可以轻松地创建片段并保存一个ref:
private val profileFragment: ProfileFragment by lazy {
ProfileFragment()
}
因为此时,每次替换内容时都会创建一个新实例。
这意味着您的替换将如下所示:
supportFragmentManager.beginTransaction()
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.replace(R.id.frame, profileFragment)
.commit()
每次创建新片段时,您都可以使用自己的创建数组,如
.replace(R.id.frame,array[it.id-1])
,其中array是array=listOf(ProfileFragment(),…),您应该将所需的参数放入一个包中。在片段中放置一个静态方法,用于在从bundle检索参数时创建实例。不要只创建新实例。有更好的方法来实现这一点。android现在支持按钮导航,你不需要为它编写代码,我尝试使用数组,但我没有在@AlexandrKolesnik工作