как сохранить текущее состояние фрагмента - PullRequest
0 голосов
/ 21 января 2020

в моей MainActivity, у меня есть нижнее меню и FrameLayout. каждое нижнее значение загружает указанный фрагмент c с помощью кода ниже:

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()

        }


    }

проблема заключается в том, что после перехода к другим фрагментам будет устранено старое состояние фрагмента, как я могу сохранить состояние текущего фрагмента и загрузить его когда я вернусь к этому фрагменту.

1 Ответ

0 голосов
/ 21 января 2020

Я не слишком уверен, что это сработает, но не могу комментировать, так как мой представитель недостаточно высок. Вы можете создать фрагменты лениво и держать ссылку:

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

Потому что в данный момент вы создаете новый экземпляр каждый раз, когда заменяете содержимое. Это означает, что ваша замена будет выглядеть так:

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