Государственный поток не испускает новое значениеAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Государственный поток не испускает новое значение

Сообщение Anonymous »

Я использую JetPack Compose с Stateflow в ViewModel . У меня есть карта , и я хочу сортировать ее по размеру каждого списка, а затем отобразить отсортированный результат в пользовательском интерфейсе.

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

 private val _mapState = MutableStateFlow(
mapOf(
"a" to listOf(1, 2, 3),
"b" to listOf(1),
"c" to listOf(1, 2)
)
)
val mapState: StateFlow = _mapState

fun sortMapByListSize() {
val sortedMap = _mapState.value.entries
.sortedBy { it.value.size }
.associateTo(LinkedHashMap()) { it.toPair() }

println("Sorted in ViewModel: $sortedMap") // ✅ This prints the sorted map

_mapState.value = sortedMap // ❌ UI does not update
}

< /code>
, затем в моем композитном, я собираю Stateflow, как это: < /p>
@Composable
fun MapScreen(viewModel: MyViewModel = viewModel()) {
val map by viewModel.mapState.collectAsState()

LaunchedEffect(map) {
println("Map inside LaunchedEffect: $map")
}

Column {
Button(onClick = { viewModel.sortMapByListSize() }) {
Text("Sort")
}
}
}
Проблема
Несмотря на то, что println («сортирован в ViewModel») показывает, что карта сортируется правильно, Compose UI не обновляется, а запуск (MAP) не получает повторного запуска.
Я использовал LinkeDhashmap для refer orve. убедился, что карта правильно сортируется внутри ViewModel.
Я пытался использовать .tomap () , .associate , .associateto (linkedhashmap ()) и т. Д.>

Подробнее здесь: https://stackoverflow.com/questions/796 ... -new-value
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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