Переход от дочернего фрагмента к другому дочернему фрагменту из меню параметров.

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

Работает отлично, но теперь мне нужно перейти от выбранного фрагмента к другому, но решения я не нашел, так как я могу открыть свой выбранный фрагмент, но не могу повторно открыть первый.

Это конфигурация навигационного контроллера в MainActivity:

      val navView: NavigationView = binding.navView
navController = findNavController(R.id.nav_host_fragment)
appBarConfiguration = AppBarConfiguration(
    setOf(
        R.id.nav_home,
        R.id.nav_two,
        R.id.nav_three,
        R.id.nav_four
    ), drawerLayout
)

navController?.let {
    setupActionBarWithNavController(it, appBarConfiguration)
    navView.setupWithNavController(it)
}

Это (неправильный) вызов во втором фрагменте для программного перехода к следующему фрагменту:

      requireActivity().findNavController(R.id.nav_host_fragment).navigate(R.id.nav_four)

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

Есть решения?

2 ответа

Предположим, у вас есть файл my_navigation.xml, и вы добавили 4 фрагмента фрагмент_1, фрагмент_2, фрагмент_3 и фрагмент_4 соответственно. Вам следует добавить пути между каждым фрагментом.

  • от фрагмента_1 до фрагмента_2, фрагмента_3, фрагмента_4
  • от фрагмента_2 до фрагмента_1, фрагмента_3, фрагмента_4
  • от фрагмента_3 до фрагмента_1, фрагмента_2, фрагмента_4
  • от фрагмента_4 до фрагмента_1, фрагмента_2, фрагмента_3

Таким образом, вы можете переходить от любого фрагмента к любому фрагменту с помощью actionID.

ссылка: https://medium.com/swlh/android-navigation-comComponent-part-1-6191323eaf39

из любого фрагмента вы можете перейти к другому фрагменту следующим образом:

      findNavController().navigate(R.id.yourActionID_that_your_write_in_myNavigation_xml_file)

Возможно, я неправильно понял вопрос, если это так, пожалуйста, сообщите мне. Удачи!

Я нашел это решение: под кодом навигатора в основном действии просто добавьте:

      navView.setNavigationItemSelectedListener { item ->
    when(item.itemId) {
        R.id.nav_home -> {
            navController.navigate(R.id.nav_home)
        }
        R.id.nav_one -> {
            navController.navigate(R.id.nav_one)
        }
        R.id.nav_two -> {
            navController.navigate(R.id.nav_two)
        }
        R.id.nav_three -> {
            navController.navigate(R.id.nav_three)
        }
    }
//And if you want to close drawer
//drawerLayout.closeDrawer(GravityCompat.START)
    true
}
Другие вопросы по тегам