Size: a a a

2019 April 29

UH

Untamed Horse in RxPM
Шейрить между пм-ками дочерних экранов
источник

UH

Untamed Horse in RxPM
И я это делаю через DI :[
источник

VC

Vasili Chyrvon in RxPM
Untamed Horse
В общем-то проблемы возникли главным образом из-за того, что я использую чичероне для навигации (уже жалею, что сознательно отказался от встроенной в RxPM), и там нужно шейрить инстанс роутера, привязанного к навигаторхолдеру родительского фрагмента, чтобы реализовать навигацию его дочерних фрагментов.
Ахаха, так это самый большой плюс навигации в RxPM над Чичероне. Именно то, что гораздо проще разрцливать кейс с вложенной навегацией. Говорю это как соавтор и Чичероне тоже 😊
источник

VC

Vasili Chyrvon in RxPM
Тогда мне кажется тебе проще всего все же либо как-то через чайлдпмки разрулить либо через репу. И ничего, что кажется что данные не для репы. Репа просто хранилище. Чего не важно.
источник

UH

Untamed Horse in RxPM
Ну вот говоря конкретно про навигаторхолдер родительского экрана, и связанный с ним роутер, который я даю пм-кам, тут проблема не в том, где хранить, а в том, что нужно поддерживать для всех пм-ок один и тот же инстанс чичероне.
А пм-ки могут создавться в разное время. Например, когда мой DI-контейнер на уровне родительского экрана пересоздался и там уже живет новый инстанс чичероне.
источник

UH

Untamed Horse in RxPM
Честно говоря, попытки подружить чичероне с пм-ками, это наверное единственный случай, который я могу придумать, где актуальна описываемая мной проблема синхронизации зависимостей у пм-ок.
источник

AR

Alexey Rybakov in RxPM
Так а что это за кейс, что PM живет дольше фрагмента, поворот экрана и смерть процесса?
источник

UH

Untamed Horse in RxPM
Да. И мне нужно обеспечить жизнь зависимостей, аналогичной жизни пм-ок. Я сделал у себя переживание DI-компонента на поворот и смерть процесса, но если это не сойдется с тем, как это делает аутласт для пм-ок, то у меня сломается навигация.
источник

AR

Alexey Rybakov in RxPM
Так должно сойтись, PM должна уничтожиться в том же случае "onDestroy с activity.isChangingConfiguration == false)", поправьте если я не прав
источник

UH

Untamed Horse in RxPM
Блин, то есть при смерти процесса не переживает, естественно. Извиняюсь, на ходу пишу. Я про поворот и don't keep activities.
источник

UH

Untamed Horse in RxPM
Alexey Rybakov
Так должно сойтись, PM должна уничтожиться в том же случае "onDestroy с activity.isChangingConfiguration == false)", поправьте если я не прав
Нет, это не так. PM, например, при don't keep activities выживет.
источник

AR

Alexey Rybakov in RxPM
Можно выпилить поддержку восстановления после смерти процесса, тогда сойдется. Don't keep activities в реальных условиях не встречается.
источник

L

Leo in RxPM
в природе встречаются такие юзеры и отдел тестирования заведет как баг
источник

AR

Alexey Rybakov in RxPM
Ну я ссылаюсь на https://habr.com/ru/company/redmadrobot/blog/426617/. Возможно те, кто встречаются это, кто активировал флаг. Как вариант писать синглактивити.
источник

AR

Alexey Rybakov in RxPM
Точнее как, PM не может пережить смерть процесса. Остается только кейс с don't keep activities, можно для тех пользователей, кто активировал флаг не поддерживать восстановление фрагментов, т.е. в onCreate replace на новый инстанс сделать.
источник

UH

Untamed Horse in RxPM
Untamed Horse
Честно говоря, попытки подружить чичероне с пм-ками, это наверное единственный случай, который я могу придумать, где актуальна описываемая мной проблема синхронизации зависимостей у пм-ок.
Есть еще один случай. Это передача данных между экранами через локальную реактивную шину в рамках скоупа родительского фрагмента. Но это хорошо решается через механизм навигации в RxPM (так, как это сделано в семпле на примере экрана выбора страны). В общем, да, буду отказываться от чичероне.
источник
2019 April 30

UH

Untamed Horse in RxPM
Нашел баг в сэмпле, связанный с передачей данных между экранами.

Если открыть экран выбора страны, свернуть приложение и убить процесс, а затем развернуть приложение и выбрать итем в списке, то будет краш.

Связано с тем, что в момент получения NavigationMessage в MainActivity во FragmentManager еще не создан инстанс AuthByPhoneScreen. Он создается при вызове findFragmentByTag, но система еще не вызвала на нем onCreate и, соответственно, не был создан новый инстанс связанной с ним PresentationModel через делегат фрагмента.

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

UH

Untamed Horse in RxPM
Как вариант фикса — можно открывать экран выбора страны через childFragmentManager в рамках фрага AuthByPhoneScreen. Родительский фрагмент всегда создается раньше, чем дочерний.
источник

UH

Untamed Horse in RxPM
И ловить NavigationMessage непосредственно в AuthByPhoneScreen при этом
источник

VC

Vasili Chyrvon in RxPM
Untamed Horse
Нашел баг в сэмпле, связанный с передачей данных между экранами.

Если открыть экран выбора страны, свернуть приложение и убить процесс, а затем развернуть приложение и выбрать итем в списке, то будет краш.

Связано с тем, что в момент получения NavigationMessage в MainActivity во FragmentManager еще не создан инстанс AuthByPhoneScreen. Он создается при вызове findFragmentByTag, но система еще не вызвала на нем onCreate и, соответственно, не был создан новый инстанс связанной с ним PresentationModel через делегат фрагмента.

Думаю, это не лучшая демонстрация того, как использовать библиотечную навигацию для передачи данных между экранами.
Спасибо, что написал! Там Дима делает довольно сильный редизайн либы, думаю это тоже глянем тогда. #issue
источник