Хорошо ли использовать один объект (плеер, менеджер и т. д.) в качестве состояния в Composable для слушателя?Android

Форум для тех, кто программирует под Android
Ответить
Гость
 Хорошо ли использовать один объект (плеер, менеджер и т. д.) в качестве состояния в Composable для слушателя?

Сообщение Гость »

Это сделано для того, чтобы избежать написания нескольких состояний в компонуемом файле.
Вот пример. менеджер

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

val manager by remember { mutableStateOf(downloadManager, neverEqualPolicy())}
manager содержит информацию, которую мы хотим показать в пользовательском интерфейсе. у менеджера есть прослушиватель:

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

DisposableEffect(true) {

val listener = object : DownloadManager.Listener {
override fun onDownloadChanged(downloadManager: DownloadManager, download: Download) {
manager = downloadManager
}

override fun onDownloadsPausedChanged(downloadManager: DownloadManager, downloadsPaused: Boolean) {
manager = downloadManager
}

override fun onDownloadRemoved(downloadManager: DownloadManager, download: Download) {
manager = downloadManager
}
}

manager.addListener(listener)
onDispose { manager.removeListener(listener) }
}
И рендеринг

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

LazyColumn {
itemsIndexed(manager.currentDownloads){index, item ->
ListItem(headlineContent = { Text("${item.percentDownloaded}") })
}
}
Поэтому каждый раз, когда происходит событие, состояние менеджера будет обновляться, а затем запускать повторный рендеринг. Но я хочу знать, является ли это подходящим способом обновления пользовательского интерфейса, или мне нужно привязать каждое состояние прослушивателя для обновления пользовательского интерфейса? В таком случае есть ли лучший способ обновить состояние?

Подробнее здесь: https://stackoverflow.com/questions/781 ... mposable-f
Ответить

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

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

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

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

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