You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Compose Dialog打开IME时点击按钮触发‘Ime callback not found’错误求助

Ime callback not found错误排查(Dialog键盘打开时点击按钮触发)

场景

Dialog的Column布局内包含文本框和Material3 Button,文本框试过android.widget及androidx.compose.material3下的多种组件。该Dialog的Composable通过navController.navigate从其他Composable跳转进入。按钮点击逻辑:通过Repository调用ViewModel发起API请求,之后调用navController.popBackStack()。

问题

当文本框的IME键盘处于打开状态时,点击按钮会抛出错误:

Ime callback not found. Ignoring unregisterReceivedCallback. callbackId: 77948589

键盘未打开时点击按钮无此错误。

已尝试方案

  • 在按钮点击开头调用focusManager.clearFocus()
  • 设置文本框keyboardOptions的imeAction = ImeAction.None
  • 参考过相关社区问题,但未找到可行解决方法

应用环境

  • 纯Compose项目
  • Android SDK 14.0(API Level 34 Revision 3)
  • Gradle 8.6
  • Kotlin Compiler 1.9.0,语言版本2.0,API版本2.0,JVM目标1.8
  • 依赖:ViewModel 2.8.0、Navigation 2.7.7、Retrofit 2.11.0、Moshi 1.14.0(其余为默认,项目为3天前创建的空活动模板)

解决方法

方法1:延迟执行页面返回

在调用popBackStack()前增加短暂延迟,给IME回调留足注销时间:

Button(onClick = {
    // 执行API请求逻辑
    viewModel.submitInput(inputText)
    // 延迟100ms后返回上一页
    CoroutineScope(Dispatchers.Main).launch {
        delay(100)
        navController.popBackStack()
    }
}) {
    Text("提交")
}

方法2:利用DisposableEffect在Dialog销毁时清焦点

在Dialog的Composable内部添加DisposableEffect,确保Dialog销毁前强制清除输入框焦点:

val focusManager = LocalFocusManager.current
DisposableEffect(Unit) {
    onDispose {
        focusManager.clearFocus()
    }
}

方法3:通过ViewModel状态触发返回

避免在按钮点击时直接执行返回,改用ViewModel的状态通知,确保焦点清理完成后再返回:

// ViewModel中定义返回状态
val shouldNavigateBack = MutableStateFlow(false)

// 提交逻辑
fun submitInput(text: String) {
    // 发起API请求
    repository.postData(text)
    // 请求完成后标记需要返回
    shouldNavigateBack.value = true
}

// Composable中监听状态
LaunchedEffect(viewModel.shouldNavigateBack) {
    viewModel.shouldNavigateBack.collect { goBack ->
        if (goBack) {
            focusManager.clearFocus()
            navController.popBackStack()
            viewModel.shouldNavigateBack.value = false
        }
    }
}

// 按钮点击
Button(onClick = { viewModel.submitInput(inputText) }) {
    Text("提交")
}

方法4:调整Navigation版本

该错误在Navigation 2.7.x版本存在偶现情况,可尝试降级到2.7.5或升级到2.8.0及以上版本,部分开发者反馈版本调整后问题消失。


内容的提问来源于stack exchange,提问作者S R Samy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 11:47:24