Как изменить атрибут метки пункта назначения в контроллере навигации?

Я пытаюсь использовать контроллер навигации в Android

введите здесь описание изображения

как вы можете видеть на изображении выше, я установил для атрибута label пункта назначения значение «Дом».

и этот ярлык будет отображаться как заголовок на моей панели инструментов. я могу изменить этот ярлык программно? потому что я хочу динамически устанавливать заголовок панели инструментов.

Я попытался изменить заголовок панели инструментов с помощью toolbar.title = "some title here", но он всегда будет перекрывать заголовок из этого ярлыка.

так как это решить?


person Alexa289    schedule 12.02.2019    source источник


Ответы (3)


Сделайте это в своей деятельности, как показано ниже, у меня это сработало:

 setSupportActionBar(toolbar)
    val navController = findNavController(R.id.nav_controller_fragment)
    val appBarConfiguration = AppBarConfiguration(navController.graph)
    setupActionBarWithNavController(navController, appBarConfiguration)


    navController.addOnDestinationChangedListener { controller, destination, arguments ->
        when (destination.id) {
            R.id.mainFragment -> toolbar.title = "ok"
            else -> {
                toolbar.title = "General"
            }
        }
    }

или если вы хотите изменить свой фрагмент, сделайте следующее:

 override fun onStart() {
    super.onStart()
    (activity as MainActivity).toolbar.title = "changed"
}
person Hussnain Haidar    schedule 12.02.2019
comment
но строка должна исходить из моего пункта назначения (фрагмента). Так что я должен делать ? Я хочу изменить это динамически - person Alexa289; 12.02.2019
comment
Привет @ Alexa289, есть новости? У меня точно такая же проблема... - person Blunderer; 22.10.2020

Просто удалите метку в своем nav_graph.xml для этого фрагмента, затем установите заголовок для своей панели инструментов во фрагменте / действии.

person Mugo Mwangi    schedule 24.11.2020

Я боролся с этим, все решения у меня не работали. Но после обширных исследований я наткнулся на решение ниже;

Создать строку

<string name="my_label">You are on {label}</string>

В вашем nav-graph.xml файле. Используйте указанную выше строку в качестве метки и создайте аргумент, имя которого должно совпадать с именем метки.

 <fragment
        android:id="@+id/your_fragment"
        .....
        android:label="@string/my_label">

        <argument
            android:name="label"
            app:argType="string" />

    </fragment>

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

  val direction = YourFragmentDirections
                .action_to_your_fragment(label = "forum")
  findNavController().navigate(direction)

Виола, это работает как шарм

person Denny    schedule 21.07.2021