169 похожих чатов

Доброе утро, изучаю сейчас navigation и возник вопрос: как данные,

переданные из одного фрагмента в другой через navigation safeargs заинжектить во viewModel?

Чтобы было понятно, в чем проблема, опишу, что я сделал:

У меня есть MainFragment и Fragment1. Я хочу передать строку из MainFragment в Fragment1
В navigation.xml у меня такой код:

<?xml version="1.0" encoding="utf-8"?>
<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/mainFragment">

<fragment
android:id="@+id/mainFragment"
android:name="com.example.navigationdemo.ui.fragments.MainFragment"
android:label="fragment_main"
tools:layout="@layout/fragment_main">
<action
android:id="@+id/action_mainFragment_to_fragment1"
app:destination="@id/fragment1" />
</fragment>

<fragment
android:id="@+id/fragment1"
android:name="com.example.navigationdemo.ui.fragments.Fragment1"
android:label="fragment_1"
tools:layout="@layout/fragment_1" >
<argument
android:name="myArgument"
app:argType="string"
android:defaultValue="Default value" />
</fragment>

</navigation>

В методе onViewCreated MainFragment:
binding?.goToScreen1?.setOnClickListener {
val action = MainFragmentDirections.actionMainFragmentToFragment3(myArgument = "MyParam")
navController.navigate(action)
}
}

А во фрагменте Fragment1: у меня такой код:
private val args by navArgs<Fragment1Args>()
private val myStringArg = args.myArgument
private val myViewModel by viewModel<MyViewModel> {parametersOf(myStringArg)}

Падает с ошибкой:
IllegalStateException: Fragment Fragment1{5de6d39} (1be22b81-0952-4ba7-b30c-fa3d724cbae5) has null arguments


Проблема ясна: на момент инициализвации viewModel аргументы еще не известны, так как если этот коде закоментить и в методе Fragmen1::onCreate вызвать args.myArgument, то переданное значение из MainFragment мы получим без всяких падений.

Вопрос: как же правильно передавать параметры во viewModel, когда сами параметры мы передаем через через navigation safeargs?
Кейс должен быть довольно частым, но я ничего не нагуглил. Заранее спасибо тебе за ответ, добрый человек) Сорян за такую простыню

2 ответов

23 просмотра

Это всё классно, конечно, но такую портянку кода надо в гист или пастбин постить

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

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта