Нажатие onBackButton возвращает к моему фрагменту, но я не хочу - PullRequest
0 голосов
/ 12 апреля 2020

Я использую компоненты навигации, у меня есть график, из которого у меня есть 3 пункта назначения

FragmentA() -> FragmentB() -> FragmentC()

Когда я go из FragmentA() в FragmentB(), при нажатии кнопки Back я не хочу чтобы вернуться к FragmentA(), вместо этого я хочу открыть к FragmentC(), я установил popUpInclusive в true в действии, которое перемещается от FragmentA() к FragmentB() и установил popUpTo FragmentC(), но когда я нажимаю backButton на FragmentB() он все еще собирается FragmentA()

Что здесь не так?

Ответы [ 2 ]

0 голосов
/ 12 апреля 2020
 // This callback will only be called when MyFragment is at least Started.
    val callback = requireActivity().onBackPressedDispatcher.addCallback(this) {
        // Handle the back button event
    }
0 голосов
/ 12 апреля 2020

Решил это, добавив прослушиватель в действие хоста и извлекив оттуда backstack

 override fun onBackPressed() {
        when(navController.currentDestination?.id){

            R.id.navigation_success -> {
                navController.popBackStack(R.id.navigation_success,true)
                navController.navigate(R.id.navigation_orders)
            }
            else -> navController.navigateUp()
        }

    }

Есть разница между navigateUp и onBackPressed, эти два работают по-разному, если мы используем navigateUp, нам нужно чтобы коснуться навигационного графика и оттуда мы можем установить popupTo, а также popupInclusive, но если мы используем только кнопку onBackPressed, нам нужно присоединить этот слушатель к нашему основному действию хоста

...