Каков наилучший способ работы с backstack фрагмента Android? - PullRequest
0 голосов
/ 20 октября 2019

Я работаю с несколькими фрагментами только с одним Упражнением, и я хочу знать, как управлять обратным стеком фрагментов при обратном нажатии (лучший способ)

Любая ссылка или небольшое объяснение с некоторым кодом может быть полезным

Ответы [ 4 ]

0 голосов
/ 21 октября 2019

Возврат на фрагменты

Нужно ли уведомлять ваш фрагмент, когда пользователь нажимает кнопку возврата?

Тупой путь:

MyFragment.kt

requireActivity().onBackPressedDispatcher.addCallback(this,
    object : OnBackPressedCallback(true) {
        override fun handleOnBackPressed() {
            // user pressed back button
        }
    })

The Rockstar Developer Way:

Добавить эту зависимость:

https://developer.android.com/reference/kotlin/androidx/activity/OnBackPressedDispatcher.html

реализация 'androidx.activity: activity-ktx: 1.0.0-rc01'

requireActivity().onBackPressedDispatcher.addCallback(this) {
    // user pressed back button
}
0 голосов
/ 20 октября 2019

Я предлагаю вам использовать Android Jetpack Navigation. Новый и улучшенный способ обработки фрагментов транзакций. Это намного лучше, чем старый метод класса FragmentTransaction. Настоятельно рекомендуется самим Google. И я также изучаю это в настоящее время. Ниже приведено руководство.

Android Jetpack - Навигация

0 голосов
/ 21 октября 2019

Пример фрагмента backstack при нажатии back:

FragmentsActivity - это действие, которое будет контейнером для всех ваших фрагментов, поэтому переопределите FragmentsActivity onBackPressed(), например, -

override fun onBackPressed() {
        val fm = supportFragmentManager
        if (fm.backStackEntryCount > 0) { //if backstack contain any fragment than pop it
            fm.popBackStack()
        } else {                          // call super function normally 
            super.onBackPressed()
        }
    }

Теперь всякий раз, когда запускаем такой фрагмент -

//If you don't want it in backstack
supportFragmentManager.beginTransaction()
.replace(R.id.fragment_container, FragmentA())
.commit() 

//If you want it in backstack
supportFragmentManager.beginTransaction()
.replace(R.id.fragment_container, FragmentA())
.addToBackStack(null)           //null or any String TAG you want
.commit() 
0 голосов
/ 20 октября 2019

Все, что вам нужно, чтобы убедиться, что вы вызываете .addToBackStack (null) в Менеджер фрагментов и Транзакция фрагмента

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...