У меня есть навигационный график: ListFragment -> Detailsheet -> editorFragment . Когда пользователь нажимает обратно из EditorFragment , навигационный компонент (NavController) появляется в ListFragment , пропуская лишн Detailship , который является нижним letsheetdialogfragment , потому что он реализует PloatingWindow интерфейс, в соответствии с ответом. В результате такой листовой фрагмент не добавляйте в задний стек навигации. >, и когда пользователь возвращается в ListFragment , он получает подробную информацию о ранее открывшемся Defitablesheph , что позволяет им снова открыть его. Все сработало, как и ожидалось до сегодняшнего дня.// ViewModel
private val _forceOpenDetailEvent = MutableSharedFlow(0, 1, BufferOverflow.DROP_OLDEST)
val forceOpenDetailEvent = _forceOpenDetailEvent.asSharedFlow()
< /code>
// ListFragment
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// ...
repeatOnStartedLatest(viewModel.forceOpenDetailEvent) {
navigateToDetail(it)
}
}
fun Fragment.repeatOnStartedLatest(flow: Flow, block: suspend (T) -> Unit) {
repeatOnLifecycleLatest(Lifecycle.State.STARTED, flow, block)
}
private fun Fragment.repeatOnLifecycleLatest(state: Lifecycle.State, flow: Flow, block: suspend (T) -> Unit) {
// https://stackoverflow.com/a/67422183/5894542
viewLifecycleOwner.lifecycleScope.launch {
repeatOnLifecycle(state) {
flow.collectLatest {
block(it)
}
}
}
}
< /code>
Сегодня я обновил Android Studio, Gradle и Gradle и зависимости от новых версий. Проблема произошла с ListFragment . Он перестал собирать ForseoPendetAileVents . Похоже, что новые версии исправили некоторые ошибки или добавлены новое поведение, и теперь ListFragment разрушает и воссоздает, когда пользователь отступает. ViewModel продолжает излучать правильные элементы, но коллекционер сломан. Но в таком случае это запустит открытие деталей в неподходящих ситуациях (вращение, экрана -> экран включен). < /P>
Какие изменения по сравнению с предыдущими версиями зависимостей, которые вызывают тот же код, чтобы прекратить работать, как и ожидалось? Код работает правильно почти два года. < /P>
// target sdk 35
implementation "androidx.activity:activity-ktx:1.10.0"
implementation "androidx.fragment:fragment-ktx:1.8.5"
implementation "androidx.navigation:navigation-fragment-ktx:2.8.5"
implementation "androidx.navigation:navigation-ui-ktx:2.8.5"
implementation "androidx.appcompat:appcompat:1.7.0"
< /code>
// target sdk 34
implementation "androidx.activity:activity-ktx:1.9.2"
implementation "androidx.fragment:fragment-ktx:1.8.3"
implementation "androidx.navigation:navigation-fragment-ktx:2.8.1"
implementation "androidx.navigation:navigation-ui-ktx:2.8.1"
implementation "androidx.appcompat:appcompat:1.6.1"
Подробнее здесь: https://stackoverflow.com/questions/793 ... fragment-b
Почему фрагмент останавливает поток после перемещения в фрагмент B? ⇐ Android
Форум для тех, кто программирует под Android
-
Anonymous
1738166901
Anonymous
У меня есть навигационный график: ListFragment -> Detailsheet -> editorFragment . Когда пользователь нажимает обратно из EditorFragment , навигационный компонент (NavController) появляется в ListFragment , пропуская лишн Detailship , который является нижним letsheetdialogfragment , потому что он реализует PloatingWindow интерфейс, в соответствии с ответом. В результате такой листовой фрагмент не добавляйте в задний стек навигации. >, и когда пользователь возвращается в ListFragment , он получает подробную информацию о ранее открывшемся Defitablesheph , что позволяет им снова открыть его. Все сработало, как и ожидалось до сегодняшнего дня.// ViewModel
private val _forceOpenDetailEvent = MutableSharedFlow(0, 1, BufferOverflow.DROP_OLDEST)
val forceOpenDetailEvent = _forceOpenDetailEvent.asSharedFlow()
< /code>
// ListFragment
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// ...
repeatOnStartedLatest(viewModel.forceOpenDetailEvent) {
navigateToDetail(it)
}
}
fun Fragment.repeatOnStartedLatest(flow: Flow, block: suspend (T) -> Unit) {
repeatOnLifecycleLatest(Lifecycle.State.STARTED, flow, block)
}
private fun Fragment.repeatOnLifecycleLatest(state: Lifecycle.State, flow: Flow, block: suspend (T) -> Unit) {
// https://stackoverflow.com/a/67422183/5894542
viewLifecycleOwner.lifecycleScope.launch {
repeatOnLifecycle(state) {
flow.collectLatest {
block(it)
}
}
}
}
< /code>
Сегодня я обновил Android Studio, Gradle и Gradle и зависимости от новых версий. Проблема произошла с ListFragment . Он перестал собирать ForseoPendetAileVents . Похоже, что новые версии исправили некоторые ошибки или добавлены новое поведение, и теперь ListFragment разрушает и воссоздает, когда пользователь отступает. ViewModel продолжает излучать правильные элементы, но коллекционер сломан. Но в таком случае это запустит открытие деталей в неподходящих ситуациях (вращение, экрана -> экран включен). < /P>
Какие изменения по сравнению с предыдущими версиями зависимостей, которые вызывают тот же код, чтобы прекратить работать, как и ожидалось? Код работает правильно почти два года. < /P>
// target sdk 35
implementation "androidx.activity:activity-ktx:1.10.0"
implementation "androidx.fragment:fragment-ktx:1.8.5"
implementation "androidx.navigation:navigation-fragment-ktx:2.8.5"
implementation "androidx.navigation:navigation-ui-ktx:2.8.5"
implementation "androidx.appcompat:appcompat:1.7.0"
< /code>
// target sdk 34
implementation "androidx.activity:activity-ktx:1.9.2"
implementation "androidx.fragment:fragment-ktx:1.8.3"
implementation "androidx.navigation:navigation-fragment-ktx:2.8.1"
implementation "androidx.navigation:navigation-ui-ktx:2.8.1"
implementation "androidx.appcompat:appcompat:1.6.1"
Подробнее здесь: [url]https://stackoverflow.com/questions/79397394/why-does-fragment-a-stop-collecting-the-flow-after-navigate-to-fragment-b[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия