Size: a a a

Cicerone Chat (RUS)

2020 September 29

AD

Aleksey D. in Cicerone Chat (RUS)
Aleksei B.
А откуда FragmentFactory возьмет аргументы для передачи их в конструктор фрагмента, если эти аргументы были переданы в SupportAppScreen?
в FragmentParams вторым параметром идет Bundle с аргументами
источник

AB

Aleksei B. in Cicerone Chat (RUS)
Ну так а Callack в Bundle безопасно запихнуть можно?
источник

KT

Konstantin Tskhovreb... in Cicerone Chat (RUS)
коллбек вообще небезопасно никуда запихивать 😉
источник

KT

Konstantin Tskhovreb... in Cicerone Chat (RUS)
так делать не надо
источник

AB

Aleksei B. in Cicerone Chat (RUS)
как тогда быть без коллбэка?)
источник

AB

Aleksei B. in Cicerone Chat (RUS)
если еще Fragment  Result Api не вышло в релиз?
источник

AD

Aleksey D. in Cicerone Chat (RUS)
Aleksei B.
как тогда быть без коллбэка?)
передать колбэк в конструктор или через кастинг родителя в onAttach/onDetach
источник

KT

Konstantin Tskhovreb... in Cicerone Chat (RUS)
Aleksei B.
как тогда быть без коллбэка?)
общая реактивная модель
источник

AB

Aleksei B. in Cicerone Chat (RUS)
Konstantin Tskhovrebov
общая реактивная модель
к сожалению еще много легаси кода с коллбэками( так быстро не переписать
источник

AD

Aleksey D. in Cicerone Chat (RUS)
Aleksei B.
к сожалению еще много легаси кода с коллбэками( так быстро не переписать
к счастью аргументы не вариант
источник
2020 October 14

KT

Konstantin Tskhovreb... in Cicerone Chat (RUS)
Могу так же сделать, как вам?
Только интересно, что будет если я отправлю результат, но не закрою экран, а тот кто слушает результат, откроет сверху еще экран...
Кто пробовал?
Или подобное поведение остается на откуп разработчикам?
источник

KT

Konstantin Tskhovreb... in Cicerone Chat (RUS)
​​Отправка данных между Fragments
#fragment

Для передачи данных между двумя фрагментами, существовало одно распространённое API — targetFragment.

По сути, targetFragment предоставляет нам способ получения данных через back stack, а всё что нам нужно — это переопределить onActivityResult в вызывающем фрагменте.

Несмотря на кажующуюся простоту, это API — не очень удобное.
Во-первых, targetFragment будет работать если фрагменты находятся в одном и том же менеджере.
Во-вторых, API разбросано по коду и становится непонятно, откуда прилетел тот или иной кусок данных.

Не так давно появилось новое решение — FragmentResultOwner. По сути, это callback, который есть у каждого FragmentManager.
Это изменение позволяет отдельным фрагментам взаимодействовать друг с другом, отправляя результаты фрагмента и прослушивая эти результаты, не требуя, чтобы фрагменты имели прямые ссылки друг на друга.

Работает он примерно так:
setFragmentResultListener("requestKey") { key, bundle ->
       val result = bundle.getString("name")
       // Do something with the result...
   }


А в том месте, где мы хотим отправить информацию нужно вызвать:
tvSave.setOnClickListener {
   setResult("requestKey", bundleOf("name" to updatedValue))
}


Точно такого же слушателя мы можем добавить и для childfragmentmanager. В целом, новое API выглядит гораздо интереснее предыдущего и виден явный прогресс.
источник

AT

Alexander Taran in Cicerone Chat (RUS)
Konstantin Tskhovrebov
Могу так же сделать, как вам?
Только интересно, что будет если я отправлю результат, но не закрою экран, а тот кто слушает результат, откроет сверху еще экран...
Кто пробовал?
Или подобное поведение остается на откуп разработчикам?
Этим и так можно пользоваться, в Чичерон его добавлять нет сысла
источник

KT

Konstantin Tskhovreb... in Cicerone Chat (RUS)
понятно, что можно, но тогда это ходит через фрагменты, и надо отдельно доставлять до вью моделей, презентеров и тд
источник

KT

Konstantin Tskhovreb... in Cicerone Chat (RUS)
популярный запрос к библиотеке - добавить возможность получать результат
источник

KT

Konstantin Tskhovreb... in Cicerone Chat (RUS)
еще вопрос к этому механизму: как там передача между чайлд фрагментом и парентом. так работает? или они должны обязательно быть в рамках одного фрагмент менеджера?
источник

ВБ

Влад Баженов... in Cicerone Chat (RUS)
Но ведь всегда передача данных через фрагменты была не очень красивым решением, это же не расширяемо, ломает поток данных, гораздо удобнее обмазаться какими нибудь интеракторами и раздавать данные направо-налево
источник

KT

Konstantin Tskhovreb... in Cicerone Chat (RUS)
да, все так. но это повышает порог библиотеки и отпугивает новых пользователей.
+ для мелких проектов в два экрана тоже может быть удобно.
я еще только размышляю, поэтому и интересно выслушать мнения
источник

ВБ

Влад Баженов... in Cicerone Chat (RUS)
с точки зрения кмпп такой подход наверное тоже не очень, придется на каждой платформе реализовывать передачу данных
источник

ES

Eugene Shapovalov in Cicerone Chat (RUS)
Влад Баженов
Но ведь всегда передача данных через фрагменты была не очень красивым решением, это же не расширяемо, ломает поток данных, гораздо удобнее обмазаться какими нибудь интеракторами и раздавать данные направо-налево
Flutter эту проблему решает через Navigator.
источник