Переход от дочернего фрагмента к другому дочернему фрагменту из меню параметров.
Привет, у меня есть компонент навигации с 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
}