Как установить и получить аргументы, установленные в NavGraph.xml?

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

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)


Сначала вам нужно добавить такой аргумент в свой 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.

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

person Abir Hossain    schedule 13.06.2019
comment
Хорошо, может я не понял. Согласно руководству разработчика Android, я думал, что существует четыре способа передачи данных между адресатами: 1. Использование модели представления 2. Использование пакета 3. Использование плагина gradle 4. Определение аргументов в navgraph.xml. Разве ваше решение не использует плагин gradle? Я хотел бы использовать номер 4. Может быть, я ошибся? Значит, способов всего три, а числа 3 и 4 одинаковы? - person Peter; 14.06.2019