Aktualisieren Sie die Benutzeroberfläche von ViewmodelAndroid

Forum für diejenigen, die für Android programmieren
Anonymous
 Aktualisieren Sie die Benutzeroberfläche von Viewmodel

Post by Anonymous »

Ich baue eine Audio-App, die Musik aus dem Geräteordner abruft. Ich verwende ContentObserver, um zu erfahren, wann sich die Daten geändert haben

Code: Select all

@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()
}
}
Ich verwende Callback, um auch die Funktion von Viewmodel auszulösen

Code: Select all

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}")
}
}
aber die Benutzeroberfläche wird nicht aktualisiert, wenn _fetchedAudioList aktualisiert wird

Code: Select all

val musicUIList = musicViewModel.fetchedAudioList.collectAsStateWithLifecycle()

es sei denn, ich löse die Funktion aus, indem ich auf etwas klicke

Code: Select all

modifier = Modifier.clickable(onClick = {musicViewModel.fetchAudioFromDevice(true)})
Wie kann ich die Benutzeroberfläche aktualisieren, wenn meine Liste im Viewmodel aktualisiert wird?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post