Как настроить кнопку навигации по ящику, если не использовать start в качестве навигации верхнего уровня?

#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)