Как динамически изменить метку во Фрагменте? - PullRequest
0 голосов
/ 18 июня 2019

Я хочу изменить "android: label" в Fragment

Я попытался запустить следующий код для изменения метки, но это не удалось.

val graph = findNavController().graph
graph.label = "测试"
findNavController().graph = graph

1 Ответ

1 голос
/ 18 июня 2019

Согласно документации UI , методы NavigationUI, такие как метод setupActionBarWithNavController(), основаны на OnDestinationChangedListener, который вызывается каждый раз, когда вы navigate() вызываете новый пункт назначения. Вот почему метка не изменяется мгновенно - она ​​обновляется только при переходе к новому месту назначения.

Документация объясняет, что для верхняя панель приложения :

метка, которую вы прикрепляете к адресату, может автоматически заполняться из аргументов, предоставленных адресату, используя формат {argName} в вашей метке.

Это позволяет вам обновить строку, которую вы используете для метки (скажем, R.string.destination_label), в форме

<string name="destination_label">You are on {destination}</string>

Используя тот же аргумент в пункте назначения, ваш заголовок будет автоматически заполнен правильной информацией.

Конечно, если у вас нет аргумента, который вы могли бы определить заранее, тогда вы бы вообще не хотели устанавливать android:label в пункте назначения и вместо этого вручную обновлять заголовок панели действий и т. Д. из этого пункта назначения.

...