Обновить пользовательский интерфейс из модели представления [закрыто]Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Обновить пользовательский интерфейс из модели представления [закрыто]

Сообщение Anonymous »

Я создаю аудиоприложение, которое получает музыку из папки устройства. Я использую ContentObserver, чтобы узнать, когда данные изменились.

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

@RequiresApi(Build.VERSION_CODES.Q)
class AudioObserver @Inject constructor(
private val directoryChangeUseCase: DirectoryChangeUseCase
) : ContentObserver(Handler(Looper.getMainLooper())) {

@RequiresApi(Build.VERSION_CODES.R)
override fun onChange(selfChange: Boolean, uris: Collection, flags: Int) {
super.onChange(selfChange, uris, flags)
directoryChangeUseCase.directoryUpdated()
}
}
Я также использую обратный вызов, чтобы вызвать срабатывание функции модели представления.

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

class MusicViewModel @Inject constructor(
private val fileRepository: FileRepository,
private val audioManager: AudioManager
) : ViewModel(), DirectoryChangeUseCase{
private val _fetchedAudioList = MutableStateFlow(emptyList())
val fetchedAudioList = _fetchedAudioList.asStateFlow()

override fun directoryUpdated() {
fetchAudioFromDevice(true)
}
fun fetchAudioFromDevice(isUpdated: Boolean){
_fetchedAudioList.update{
fileRepository.fetchAudioFiles(isUpdated).map {it.toMusicUi()}
}
Log.d("called", "${_fetchedAudioList.value.size}")
}
}
Однако пользовательский интерфейс не обновляется при обновлении _fetchedAudioList.

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

val musicUIList = musicViewModel.fetchedAudioList.collectAsStateWithLifecycle()
если я не активирую функцию, нажав на что-нибудь

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

modifier = Modifier.clickable(onClick = {musicViewModel.fetchAudioFromDevice(true)})
Как обновить пользовательский интерфейс при обновлении моего списка в модели представления?

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

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

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

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

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

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