Почему значок плавающей кнопки в составлении не будет меняться при изменении какого-либо значенияAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Почему значок плавающей кнопки в составлении не будет меняться при изменении какого-либо значения

Сообщение Anonymous »

У меня есть функция создания сообщения

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

@Composable
fun MediaPlayerController(
isMediaPlaying: Boolean,
onStart: () -> Unit,
onNext: () -> Unit
) {
Row() {
FloatingActionButton(
onClick = { onStart() },
) {
Icon(imageVector = if (isMediaPlaying) Icons.Filled.Pause else Icons.Filled.PlayArrow, contentDescription = null)

}
}
}

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

@Composable
fun BottomBarPlayer(
media: Media,
isMediaPlaying: Boolean,
onStart: () -> Unit,
onNext: () -> Unit,
) {
BottomAppBar(content = {
Column(
) {
Row(
) {
MediaPlayerController(
isMediaPlaying = isMediaPlaying,
onStart = onStart,
onNext = onNext
)
}
}
})
}

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

@Composable
fun App(
isMediaPlaying: Boolean,
mediaList: MutableList,
currentPlayingMedia: Media,
onItemClicked: (Int) -> Unit,
) {
Scaffold(        bottomBar = {
BottomBarPlayer(media = currentPlayingMedia , isMediaPlaying =isMediaPlaying , onStart = onStart,onNext=onNext,navController=navController)
}
)

}
}

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

    @Composable
fun Main() {
LMusicTheme {
Surface(
) {
App(
isMediaPlaying = viewModel.isPlaying,
mediaList = viewModel.mediaList,
currentPlayingMedia = viewModel.currentSelectedMedia,
onStart = {
viewModel.onUiEvents(UIEvents.PlayToggle)
},
onItemClicked = {
viewModel.onUiEvents(UIEvents.SelectedMediaChange(it))
startService()
},
onNext = { viewModel.onUiEvents(UIEvents.SeekToNext) })
}
}
}

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

  fun onUiEvents(uiEvents: UIEvents) = viewModelScope.launch {
when(uiEvents){
UIEvents.SeekToNext ->mediaPlayerServiceHandle.onPlayerEvents(PlayerEvent.SeekToNext)
is UIEvents.PlayToggle -> {
mediaPlayerServiceHandle.onPlayerEvents(
PlayerEvent.PlayToggle
)
}
is UIEvents.SelectedMediaChange -> {
mediaPlayerServiceHandle.onPlayerEvents(
PlayerEvent.SelectMediaChange,
selectedAudioIndex = uiEvents.index
)
}
}
}

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

 suspend fun onPlayerEvents(
playerEvent: PlayerEvent, selectedAudioIndex: Int = -1, seekPosition: Long = 0
) {
when (playerEvent) {
PlayerEvent.PlayToggle -> playToggle()
PlayerEvent.SelectMediaChange -> {
when (selectedAudioIndex) {
exoPlayer.currentMediaItemIndex -> {
if (exoPlayer.isPlaying){
_mediaState.value = MediaState.Playing(
isPlaying = false
)
playToggle()
}else{
_mediaState.value = MediaState.Playing(
isPlaying = true
)
playToggle()
}
}

else ->  {
exoPlayer.seekToDefaultPosition(selectedAudioIndex)
_mediaState.value = MediaState.Playing(
isPlaying = true
)
exoPlayer.playWhenReady = true
startProgressUpdate()
}
}
}
}
}
}

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

  private suspend fun playToggle() {
if (exoPlayer.isPlaying) {
exoPlayer.pause()
_mediaState.value = MediaState.CurrentPlaying(
exoPlayer.currentMediaItemIndex
)
_mediaState.value = MediaState.Playing(
isPlaying = false
)
Log.e("MediaPlayerServiceHandle", "playToggle: isPlaying ${exoPlayer.isPlaying}")
stopProgressUpdate()
} else {
_mediaState.value = MediaState.Playing(
isPlaying = true
)
exoPlayer.play()
_mediaState.value = MediaState.CurrentPlaying(
exoPlayer.currentMediaItemIndex
)
Log.e("MediaPlayerServiceHandle", "playToggle: isPlaying ${exoPlayer.isPlaying}")
startProgressUpdate()
}
}
Я не знаю, почему я нажимаю эту кнопку с плавающей запятой, ее значок не меняется, хотя isPlaying были изменены
Я не знаю, как это изменилось, я нуд, пожалуйста, помогите мне, спасибо
я не могу публиковать больше кода, я пытаюсь удалить код, который кажется бесполезным для этого вопроса, если нужно, я опубликую, извините, я нуб
p>
Честно говоря, я хочу попробовать использовать currentRecomposeScope.invalidate(), но думаю, что это нехорошо, есть другие способы?

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

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

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

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

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

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