在 Kotlin Jetpack Compose 中重新启动活动时,如何修复 D/Compose Focus 的 Per App Language 崩溃:Owner FocusChanged(false)

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

我目前正在使用 Jetpack compose 在 Android(Kotlin)上试验 Per App Language。我有一个抽屉,可以在其中调用更改语言的选择(来自 https://github.com/android/user-interface-samples/blob/main/PerAppLanguages/compose_app/app/src/main/java/com 的 LocaleDropDownMenu /example/perapplanguages/MainActivity.kt)。我遵循了所有需要的东西并且它起作用了,屏幕(活动)将重新启动并且文本将改变。但是,我注意到一个错误,每当更改语言时,我都会看到日志消息“D/Compose Focus:Owner FocusChanged(false)”。如果在那之后,我尝试按“后退”按钮退出应用程序,我将收到“无响应”消息。我可以选择等待,然后如果我尝试按回,它会响应并关闭。如果我在更改语言后做其他事情,比如在主屏幕上查看/滚动/点击一会儿,然后点击返回按钮退出,它会毫无问题地关闭

我试图使用 FocusRequester,但我认为我用错了。我应该使用副作用吗?

主屏幕

@Composable
fun HomeScreen(modifier: Modifier = Modifier, viewModel: MainViewModel) {

    val focusRequester = remember { FocusRequester() }

    Box(
        modifier = Modifier
            .focusRequester(focusRequester)
            .onFocusChanged { focusState ->
                if (!focusState.isFocused)
                    focusRequester.requestFocus()
            }
            .fillMaxSize(),

        contentAlignment = Alignment.Center) {
        Column {
         ....
        }

    }


}

Logcat 结果:

ActivityManager   system_server     ANR in ...
              Reason: Input dispatching timed out (Application does not have a focused window) ...
Frozen: false

重启后有没有办法强制聚焦?或者有什么方法可以避免应用程序崩溃?

kotlin android-activity android-jetpack lost-focus
© www.soinside.com 2019 - 2024. All rights reserved.