Установить заголовок панели инструментов динамически с помощью навигационного компонента - PullRequest
1 голос
/ 16 апреля 2019

Я пытаюсь установить заголовок панели инструментов динамически, я не знаю, возможно ли это или нет.

Предположим, у меня есть список элементов, каждый элемент, по которому я щелкнул, открывает новый фрагмент, поэтому я пытаюсь динамически изменять заголовок панели инструментов для каждого элемента.

Я пытался:

it.findNavController().navigate(direction)
it.findNavController().currentDestination!!.label = someTitle

Но это не работает.

Есть несколько связанных тем, например:

Как установить заголовок на панели приложения с помощью компонента архитектуры навигации

Но это не решает мою проблему эффективно, это обходной путь.

1 Ответ

4 голосов
/ 16 апреля 2019

Навигация поддерживает аргументы в метках начиная с Навигация 1.0.0-alpha08 или выше:

Метки назначения при использовании с методами NavigationUI теперь будут автоматически заменять {argName} экземпляров в вашем android:label на правильный аргумент b / 80267266

Поэтому вы можете установить метку на android:label="{dynamicTitle}", а затем передать аргумент вашему вызову navigate. Поскольку вы используете Safe Args, вам нужно добавить аргумент к месту назначения:

<fragment
    android:id="@+id/myFragment"
    android:name=".MyFragment"
    android:label="{dynamicTitle}">
  <argument
      android:name="dynamicTitle"
      app:argType="string"/>
</fragment>

Затем укажите свой динамический заголовок при построении направления:

val directions = YourDirections.actionToMyFragment(someTitle)
it.findNavController().navigate(directions)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...