变量改变时变量值的显示不改变(Jetpack Compose Android Studio)

问题描述 投票:0回答:1

应用程序使用mvvm和jetpack compose,屏幕(View,compose)使用以下代码显示是否已获得权限:

val context = LocalContext.current
val access by remember { mutableStateOf(
    NotificationManagerCompat.getEnabledListenerPackages(context)
        .contains(context.packageName)
    ) }
Text(if (access) "good" else "bad")

之后,使用以下命令打开设置:

context.startActivity(Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"))

更改设置后,屏幕上显示旧值(未更新),但如果您转到另一个屏幕并再次打开此屏幕,显示的值会更新

  1. 如何让更改设置后,屏幕上的显示值立即更新?
  2. 是否可以将这个设置的参数的读取传输到ViewModel中?
android mvvm android-jetpack-compose
1个回答
0
投票

您的应用程序返回前台后,您可能需要立即刷新可组合项。您当前设置了访问当前首选项的初始值,但变量的值未刷新,因为NotificationManagerCompat不返回Flow或LiveData。

每当应用程序再次进入前台时,您都可以尝试刷新变量。使用

onResume
Activity 生命周期回调来检测这一点。例如,请参阅以下代码:

val lifecycleOwner = LocalLifecycleOwner.current
val lifecycleState by lifecycleOwner.lifecycle.currentStateFlow.collectAsState()

val access by remember { mutableStateOf(
    NotificationManagerCompat.getEnabledListenerPackages(context)
        .contains(context.packageName)
    ) 
}

LaunchedEffect(lifecycleState) {
    if (lifecycleState == Lifecycle.State.RESUMED ) {
        access = NotificationManagerCompat.getEnabledListenerPackages(context)
           .contains(context.packageName)
    )
}
© www.soinside.com 2019 - 2024. All rights reserved.