#android #navigation-drawer #android-navigation
#Android #навигация-ящик #android-навигация
Вопрос:
Я использую навигационный график для навигации и имею начальный экран (фрагмент заставки) в качестве первого отображаемого фрагмента. Проблема в том, что когда я перехожу к основному фрагменту / экрану, вместо значка ящика отображается верхняя кнопка навигации. Как мы можем получить контроль над этим? Какие есть варианты. Как я могу изменить начальное назначение? (если возможно)
Когда пользователь находится в пункте назначения верхнего уровня, кнопка навигации становится значком ящика, если пункт назначения использует DrawerLayout. Если пункт назначения не использует DrawerLayout, кнопка навигации скрыта. Когда пользователь находится в любом другом пункте назначения, кнопка навигации отображается как кнопка вверх . Чтобы настроить навигационную кнопку, используя в качестве назначения верхнего уровня только пункт назначения start, создайте объект AppBarConfiguration и передайте соответствующий график навигации, как показано ниже:
Пример кода
Моя проблема в том, что кнопка «Назад» все еще присутствует при переходе к next_fragment. Он должен отображать значок меню / гамбургера.
class MainActivity : AppCompatActivity() {
private lateinit var drawerLayout: DrawerLayout
private lateinit var appBarConfiguration : AppBarConfiguration
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding = DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)
drawerLayout = binding.drawerLayout
val navController = this.findNavController(R.id.mainNavigationHostFragment)
NavigationUI.setupActionBarWithNavController(this, navController)
appBarConfiguration = AppBarConfiguration(setOf(R.id.nextFragment), drawerLayout)
NavigationUI.setupWithNavController(binding.mainNavigationDrawerView, navController)
val navigationHeader = binding.mainNavigationDrawerView.getHeaderView(0)
val iconButton = navigationHeader.findViewById<ImageButton>(R.id.main_nav_icon_button)
}
override fun onSupportNavigateUp(): Boolean {
val navController = this.findNavController(R.id.mainNavigationHostFragment)
return NavigationUI.navigateUp(navController, appBarConfiguration)
}
}
Комментарии:
1. В соответствии с принципами навигации вы не должны использовать заставку в качестве начального пункта назначения.
NavigationUI
предполагается, что вы на самом деле следуете принципам.
Ответ №1:
Вместо того, чтобы переходить Navigation Graph
к AppbarConfiguration
, передайте идентификатор фрагмента, который должен показывать HamBurger icon
, таким образом, когда отображается конкретный фрагмент, он показывает значок home / hamburger вместо значка back.
То есть
val appBarConfiguration = AppBarConfiguration(setOf(R.id.FAGMENT_THAT_SHOULD_SHOW_HOME_ICON), DRAWER_LAYOUT)
Обновить
Вместо
val navController = this.findNavController(R.id.mainNavigationHostFragment)
NavigationUI.setupActionBarWithNavController(this, navController)
appBarConfiguration = AppBarConfiguration(setOf(R.id.nextFragment), drawerLayout)
NavigationUI.setupWithNavController(binding.mainNavigationDrawerView, navController)
val navigationHeader = binding.mainNavigationDrawerView.getHeaderView(0)
val iconButton = navigationHeader.findViewById<ImageButton>(R.id.main_nav_icon_button)
Просто
val navController = this.findNavController(R.id.mainNavigationHostFragment)
appBarConfiguration = AppBarConfiguration(setOf(R.id.nextFragment), drawerLayout)
NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);
Комментарии:
1. Привет, я действительно пробовал это, и получается, что функциональность работает, но значок кнопки по-прежнему является стрелкой назад @Debarshi Bhattacharjee
2. Вы используете ящик или просто хотите показать значок гамбургера??
3. Я использую drawer, ваше решение работает так, как я пробовал, но значок не меняется со значка «Назад» на значок гамбургера.
4. Затем вам нужно передать DrawerLayout в качестве второго аргумента в AppbarConfiguration .
5. Да, я действительно это делаю. Я добавил свой пример кода, который является частью MainActivity в моем вопросе. Это правильная строка? AppBarConfiguration(setOf(R.id.nextFragment), DrawerLayout)