Как установить и получить аргументы, установленные в NavGraph.xml? - PullRequest
0 голосов
/ 07 июня 2019

Я знаю статьи разработчиков Android о Android Navigation:

https://developer.android.com/guide/navigation/navigation-pass-data

и

https://developer.android.com/guide/navigation/navigation-getting-started

Ни в одной из статей не описано, какустановить значения аргументов, определенных в NavGraph.xml в исходном фрагменте, и как получить их в целевом фрагменте?Не могли бы вы дать мне подсказку?

Мне также известен метод Navigation.createOnClickListener (int ID, Bundle args) для установки OnClickListener на кнопку для навигации в другое место назначения.Но аргументы пакета не совпадают с аргументами, которые я определил в NavGraph.xml.Не так ли?

1 Ответ

0 голосов
/ 13 июня 2019

Сначала вам нужно добавить такой аргумент в navgraph.xml

<fragment
    android:id="@+id/score_destination"
    android:name="com.example.android.guesstheword.screens.score.ScoreFragment"
    android:label="destination_fragment"
    tools:layout="@layout/destination_fragment">
    <action
        android:id="@+id/action_restart"
        app:destination="@+id/game_destination"
        app:enterAnim="@anim/slide_in_right"
        app:exitAnim="@anim/slide_out_left"
        app:popEnterAnim="@anim/slide_in_right"
        app:popExitAnim="@anim/slide_out_lef />
    <argument
        android:name="score"
        android:defaultValue="0"
        app:argType="integer" />
</fragment>

Затем вы должны отправить аргумент из исходного фрагмента следующим образом:

findNavController(this).navigate(SourceFragmentDirections.actionSourceToDestination(argument))

И, наконец, вы можете получить аргумент из целевого фрагмента:

DestinationFragmentArgs.fromBundle(arguments!!).score

В верхнем примере я отправил набранный с помощью int счет имени аргумента. Вы можете отправить любой аргумент, как этот. Если ваш аргумент не является примитивным типом, вы также можете отправить этот аргумент, создав класс модели Parcelable.

Я был бы рад предоставить вам любую дополнительную информацию. Спасибо :)

...