Пакет становится нулевым при использовании безопасной навигации по аргументам

Я пытаюсь использовать новую функцию навигации в android x с помощью java, и я столкнулся с проблемой ниже

Я использую Safe Args для передачи данных из одного пункта назначения из другого, но мой пакет всегда равен нулю. Я перепробовал столько вариантов.

Пробовал передать аргумент без безопасных аргументов, и даже с безопасными аргументами я получаю сообщение об ошибке

// Passing an argument in fragment
nameBtn.setOnClickListener(v -> {
            AccountFragmentDirections.ToNameFragment direction =
                    AccountFragmentDirections.toNameFragment().setNameArgument(editName.getText().toString());
            Navigation.findNavController(v).navigate(direction);
        });


//Retriving the nameArgument from bundle
        String name  = NameFragmentArgs.fromBundle(savedInstanceState).getNameArgument();


<!-- Fragments in Navigation graph -->
    <fragment
        android:id="@+id/nameFragment"
        android:name="com.example.navigationdemo.NameFragment"
        android:label="fragment_name"
        tools:layout="@layout/fragment_name">

        <argument
            android:name="nameArgument"
            app:argType="string"
            app:nullable="true"
            android:defaultValue="none" />
    </fragment>

    <fragment
        android:id="@+id/accountFragment"
        android:name="com.example.navigationdemo.AccountFragment"
        android:label="fragment_account"
        tools:layout="@layout/fragment_account" >
        <action
            android:id="@+id/toNameFragment"
            app:destination="@id/nameFragment" />
    </fragment>

person ShoaibuldinMemon    schedule 25.06.2019    source источник
comment
Проблема есть и в официальном курсе udacity. В приложении Mars Property также отправили исправления.   -  person Salil Kaul    schedule 11.11.2019


Ответы (1)


Вы не должны использовать savedInstanceState для получения безопасных аргументов. Вместо того

String name  = NameFragmentArgs.fromBundle(savedInstanceState).getNameArgument();

Использовать

String name  = NameFragmentArgs.fromBundle(getArguments).getNameArgument();

Также обратите внимание, что android:defaultValue="none" будет буквально String со значением "none".

person Alexey Denysenko    schedule 25.06.2019
comment
Спасибо, человек, он работает нормально. Я не смог найти никакой документации или сообщений об этом - person ShoaibuldinMemon; 25.06.2019