Hier ist der Code für den zusammensetzbaren Bildschirm:
Code: Select all
@OptIn(ExperimentalMaterialApi::class)
@Stateless
@Composable
fun HelpVideo(@RawRes videoResource: Int,onNavIconClicked: () -> Unit,@StringRes guideTitle: Int)
{
ApplyStatusNavBarColor()
MaintenanceAppScaffold(topAppBar = {
CommonAppBar(
text = R.string.soundassist_update_interrupted_video,
isInfoButton = false,
isBackButton = false
)
})
{
val context = LocalContext.current
val exoPlayer = remember {
ExoPlayer.Builder(context).build().apply {
val videoUri = RawResourceDataSource.buildRawResourceUri(videoResource)
val mediaItem = MediaItem.fromUri(videoUri)
addMediaItem(mediaItem)
prepare()
playWhenReady = true
}
}
LaunchedEffect(exoPlayer) {
exoPlayer.awaitVideoFinish()
onNavIconClicked()
}
AndroidView(
modifier =
Modifier.fillMaxSize(),
factory = {
StyledPlayerView(context).apply {
player = exoPlayer
layoutParams =
FrameLayout.LayoutParams(
ViewGroup.LayoutParams
.MATCH_PARENT,
ViewGroup.LayoutParams
.MATCH_PARENT
)
useController = false
}
}
)
DisposableEffect(exoPlayer) {
onDispose {
exoPlayer.release()
}
}
}}
Beim Zurücknavigieren:
- Die PlayerView ist einige Sekunden lang auf dem vorherigen Bildschirm sichtbar
bevor sie verschwindet. Dies geschieht unabhängig davon, ob ich die Zurück-Taste drücke oder navController.popBackStack() verwende.
- Verwendung von navController.popBackStack() – Das Problem besteht weiterhin.
- Die einzige Problemumgehung, die ich gefunden habe, ist Aufruf von navController.navigate(GoToPreviousScreen). Dies löst zwar das
visuelle Problem, führt jedoch zu anderen navigationsbezogenen Komplikationen
und ist keine ideale Lösung.
Wie kann ich dieses Problem beheben und gleichzeitig das richtige Navigationsverhalten beibehalten und Problemumgehungen wie navController.navigate() vermeiden?
Zusätzlicher Kontext :
Ich verwende Jetpack Compose mit ExoPlayer für die Videowiedergabe.
Das Problem scheint mit dem Lebenszyklus oder der Entsorgung von PlayerView in AndroidView zusammenzuhängen.
Bild zeigt das Problem