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工作