Android Fragment собирайте Sharedflow из выпуска общего просмотраAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Android Fragment собирайте Sharedflow из выпуска общего просмотра

Сообщение Anonymous »

В настоящее время у меня есть фрагмент viewpager2 (как начало назначения), в котором содержится два фрагмента ребенка: ActiveorderFragment и reflyorderfragment , у них оба есть свои собственные ViewModel S, чтобы обрабатывать вызовы API (чтобы получить активные заказы и завершенные заказы). Заказан editorFragment , и существует кнопка «Установить как активный/завершенный», нажатие на это, обновит статус порядка (просто запрос ) и вернется к фрагменту viewpager2 . OrderViewModel , который является общим ViewModel :

Код: Выделить всё

class OrderViewModel(application: Application) : AndroidViewModel(application) {
private val uiScope = viewModelScope
private val _isOrderStatusChanged = MutableSharedFlow(replay = 1)

val isOrderStatusChanged: SharedFlow
get() = _isOrderStatusChanged

fun updateIsOrderStatusChanged() = _isOrderStatusChanged.emit(uiScope, true)
}
Тогда я наблюдаю (собирать) этот sharedflow increateview () of activeorderfragment и reftleorderfragment :

Код: Выделить всё

viewLifecycleOwner.lifecycleScope.launch {
viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.CREATED) {
orderViewModel.isOrderStatusChanged.collect {
if (it) {
Log.v("xxx", "refreshed!")
viewModel.refreshActiveOrders()    //similar in CompletedOrderFragment
}
}
}
}
< /code>
Здесь возникает проблема: когда я изменил статус и возвращаюсь на страницы, они оба получают уведомление и обновления. Тем не менее, теперь я нажимаю на любой элемент заказа, чтобы перейти на страницу редактора, но ничего не делаю, и возвращаюсь, Collect {} 
снова вызывается, что не является ожидаемым поведением. Как это предотвратить? Я думаю, что это имеет отношение к свойству воспроизведения ...

Некоторая дополнительная информация:
  • Зачем использовать ViewLifeCycleOwner вместо повторного кода> 1 . Sharedflow .


Подробнее здесь: https://stackoverflow.com/questions/720 ... odel-issue
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»