Как передать значения обратно фрагменту в компоненте архитектуры навигации? - PullRequest
0 голосов
/ 11 июля 2020

Предположим, у меня есть объект класса во фрагменте A и я передал его фрагменту B. Когда нажата кнопка вверх (кнопка возврата), я хочу, чтобы тот же объект был передан обратно.

Я могу получить чтобы узнать, когда нажимается кнопка вверх (кнопка назад), и узнать имя фрагмента. Но отправка параметров не работает. Он показывает, что студент val отсутствует и не имеет значения по умолчанию. Когда я задаю значение по умолчанию, это приводит к ошибке слишком много аргументов, предоставленных для publi c open fun fragmentBTofragnentA

Вот код ниже.

override fun onSupportNavigateUp (): Boolean {

val navController = this.findNavController(R.id.myNavHostFragment)
Log.d("Up button", "Main activity")

val id = navController.currentDestination!!.id
Log.d("Now id is: ", "${id.toString()}")

val label = navController.currentDestination!!.label
Log.d("Now id is: ", "${label.toString()}")

if (label == "FragmentB") {
    navController.navigate(FragmentBDirections.actionFragmentBToFragmentA(
        obj
    )
    return false
}

return navController.navigateUp()

файл навигации

<navigation
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/navigation"
    app:startDestination="@id/fragmentA">

    <fragment
        android:id="@+id/fragmentA"
        android:name="com.example.fragmentdatapassings.FragmentA"
        android:label="FragmentA">
        <action
            android:id="@+id/action_fragmentA_to_fragnentB"
            app:destination="@+id/fragmentB" />
        <argument android:name="student"
            app:argType="com.example.StudentWork.Student" />
    </fragment>

    <fragment
        android:id="@+id/fragmentB"
        android:name="com.example.fragmentdatapassings.FragmentB"
        android:label="FragmentB">
        <action
            android:id="@+id/action_fragmentB_to_fragnentA"
            app:destination="@+id/fragmentA" />
        <argument android:name="student"
            app:argType="com.example.StudentWork.Student" />
    </fragment>

Любая помощь приветствуется. Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 11 июля 2020

Вы можете добавить значение по умолчанию и атрибуты, допускающие значение NULL, как показано ниже, и проверить, устранена ли ошибка. Вы также можете проверить этот пример .

<argument android:name="student"
          app:argType="com.example.StudentWork.Student" 
          android:defaultValue="@null"
          app:nullable="true" />
0 голосов
/ 11 июля 2020

Вы можете попробовать использовать методы setFragmentResult и setFragmentResultListener в классе FragmentMananger. Думаю, эти методы могут решить вашу проблему. В официальном руководстве есть пример https://developer.android.google.cn/training/basics/fragments/pass-data-between#java. Надеюсь, это поможет вам.

...