使用 Jetpack Compose 的键盘被 Compose beta-01 损坏(未从 DecorView 中找到 ViewTreeLifecycleOwner)

2023-12-13

这与这个问题相关

如上所述here我能够使用 Jetpack Compose 创建键盘。现在我将项目升级后alpha-11 to alpha-12代码坏了(并且仍然被破坏beta-01)并且每当我尝试打开键盘时都会收到以下错误:

 java.lang.IllegalStateException: ViewTreeLifecycleOwner not found from DecorView@aaf805f[InputMethod]
        at androidx.compose.ui.platform.WindowRecomposer_androidKt.createLifecycleAwareViewTreeRecomposer(WindowRecomposer.android.kt:214)
        at androidx.compose.ui.platform.WindowRecomposer_androidKt.access$createLifecycleAwareViewTreeRecomposer(WindowRecomposer.android.kt:1)
        at androidx.compose.ui.platform.WindowRecomposerFactory$Companion$LifecycleAware$1.createRecomposer(WindowRecomposer.android.kt:98)
        at androidx.compose.ui.platform.WindowRecomposerPolicy.createAndInstallWindowRecomposer$ui_release(WindowRecomposer.android.kt:151)
        at androidx.compose.ui.platform.WindowRecomposer_androidKt.getWindowRecomposer(WindowRecomposer.android.kt:199)
        at androidx.compose.ui.platform.AbstractComposeView.ensureCompositionCreated(ComposeView.android.kt:176)
        at androidx.compose.ui.platform.AbstractComposeView.onAttachedToWindow(ComposeView.android.kt:207)
        at android.view.View.dispatchAttachedToWindow(View.java:20105)
        at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3430)
        at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3437)
        at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3437)
        at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3437)
        at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3437)
        at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3437)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2052)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1745)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7768)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:967)
        at android.view.Choreographer.doCallbacks(Choreographer.java:791)
        at android.view.Choreographer.doFrame(Choreographer.java:726)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:952)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7356)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:491)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:940)

这很奇怪,因为我已经设置了ViewTreeLifecycleOwner here并且在以前版本的 compose 中工作得很好,直到alpha-12

该错误让我不知道什么出了问题以及我应该更改什么。也许你可以帮助我。

在这里您可以找到可重现示例的所有代码


错误消息显示:

从 DecorView@aaf805f[InputMethod] 中找不到 ViewTreeLifecycleOwner

Compose 寻找一个ViewTreeLifecycleOwner设置在DecorView你的整个Window,而不是在您的视图本身上设置的。

因此,而不是设置ViewTree是在ComposeKeyboardView你返回,而是使用InputMethodService API of getWindow() with getDecorView()获取窗口的 DecorView。

override fun onCreateInputView(): View {
    val view = ComposeKeyboardView(this)
    window?.window?.decorView?.let { decorView ->
        ViewTreeLifecycleOwner.set(decorView, this)
        ViewTreeViewModelStoreOwner.set(decorView, this)
        ViewTreeSavedStateRegistryOwner.set(decorView, this)
    }
    return view
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Jetpack Compose 的键盘被 Compose beta-01 损坏(未从 DecorView 中找到 ViewTreeLifecycleOwner) 的相关文章

随机推荐

  • Scala 逆变和协变

    我正在研究 scala 的类型系统 发现了一个奇怪的情况 我有充分的理由相信 我不懂协变和协变 这是我的问题案例 我有两个类 Point 和 ColorPoint 它是 Point 的子类 class Point val x Int val
  • jQuery UI 按钮未“取消单击”

    http jqueryui com demos button default它们使用起来非常简单 但由于某种原因 我的按钮没有 取消点击 也就是说 在我单击按钮后 它保持其悬停样式 如果我将其 onClick 函数设置为仅执行一些简单的操作
  • 有没有办法检索 Dialogflow 中的对话历史记录?

    有没有办法获得用户和代理之间的完整对话 与我通过单击历史标签获得的结果非常相似 但是以编程方式获得 重点是将用户和代理之间的交互保存为文本 提前谢谢各位了 没有 API 可以直接从 Dialogflow 检索历史记录 但您可以做的是启用日志
  • 在python 2.7中同时运行脚本多次

    您好 我正在尝试多次运行脚本 但根据我的理解 希望这同时发生 我将一起使用子进程和线程 但是 当我运行它时 它看起来仍然是按顺序执行的 有人可以帮助我 以便我可以让它一遍又一遍地运行相同的脚本 但同时 它实际上有效但速度很慢吗 编辑忘记了最
  • 在 UIWebView 中显示 .rtf 文件

    我正在尝试显示为我的服务器下载的 rft 文件 我首先使用 UITextView 但我可以看到文本 但也显示了很多编码和与颜色和格式相关的奇怪字符 不管怎样 在这里搜索我发现 UITextView 无法正确显示 rtf 文本 因此 我继续尝
  • 如何在 R 中以美元格式设置条形图标签的格式?

    希望在 x 轴上的标签和条形图中的数字上添加美元符号 下面是我的代码和图表 YTD bar lt ggplot TYSales LYSales aes x as character FSCL YR y SALES geom bar stat
  • 如何在 Nuxt.js 中的内联样式中使用背景图像

    我有一个 vue我想在其中使用内联样式的文件 img src static img info production pic4 jpg class t22 a href page fresco art class btn t23 First
  • Tomcat 上的 Jersey REST 服务出现 404 错误

    我已经查看了有关该主题的所有可用答案 要么我面临一个完全不同的问题 要么我错过了一些重要的事情 服务等级 package org test import javax ws rs GET import javax ws rs Path imp
  • 通过API或网页公开数据库自增id

    我认为不公开自动递增的数据库 ID 帐户 产品等 是更好的方法 我们也许可以使用 UUID 并通过 API 或网页公开它们 但我查了一下 很多大公司似乎并不关心 谷歌 亚马逊 Facebook Twitter 似乎都有数字 自动递增帐户 I
  • htaccess重写不同页面的url

    我在 htaccess 文件中做了这个 用于从不同页面重写 url Options FollowSymLinks RewriteEngine on RewriteCond REQUEST FILENAME f RewriteCond REQ
  • 审计实体 JPA 中的更改

    我有 Spring MVC JPA 应用程序 我的应用程序中有几个实体在不断变化 我希望能够审核此更改 我发现有一个 Audited跟踪某些字段或整个实体的更改的注释 我想知道是否有任何方法可以配置此跟踪选项 我希望能够跟踪更改的内容以及更
  • git commit 出现致命错误“致命:CRLF 将被 LF 替换”

    我正在使用 Ubuntu 13 10 x64 我正在开发一个项目 一些开发人员正在使用 Windows 我最近更改了 git 配置core eol到 lf 和core autocrlf 输入 和core safecrlf到 真实 从那时起
  • dbplyr copy_to 不将表保存到数据库

    我正在尝试将本地数据帧从 R 复制到我的 db2 数据库 我有权写入该表 并且我已验证连接正常工作 我在用 copy to connection data frame name my table name 我收到以下错误 这对我来说没有意义
  • JSON_MODIFY 在 SQL Server 2017 中无法正常工作

    这是我的代码 DECLARE info NVARCHAR MAX searchQuery reportType ReportedHcEcg pageQuery pageNumber 1 pageSize 10 sortColumnName
  • 运行多个Python脚本

    我想创建一个简单的 Python 程序 它将同时执行 2 个独立的脚本 目前 这两个脚本只是打印一系列数字 但我的目的是在将来使用该程序同时运行一些 Twitter 流程 序 我怀疑我需要使用subprocess Popen但我不太清楚我应
  • 使用 google place Api 在 Android 中查找以公里为单位的距离

    我想显示两个地方的距离 以公里为单位 为此我编写了以下代码 hyd 17 38 78 48 eluru 16 7 81 1 private String getDistance double lat1 double lat2 double
  • 具有类型混淆的自定义 Java 迭代器

    我有一个通用类 它捆绑了一个对象和一个订单 public class OrderedObject
  • 创建 AWS QuickSight 模板时出现“Expected 2 placeholders.Given 1”错误

    我已按照 AWS Quicksight 文档中的建议设置了 template json 文件here 我的文件如下所示 AwsAccountId xxxxxxx TemplateId TestTemplate Name Demo Dashb
  • 如何实现包含构造函数和方法的 TypeScript 构造签名?

    我已经了解了 TypeScript 中的这样的功能 构建签名 它允许声明类型 例如 type PointCreator new x number y number x number y number test test number num
  • 使用 Jetpack Compose 的键盘被 Compose beta-01 损坏(未从 DecorView 中找到 ViewTreeLifecycleOwner)

    这与这个问题相关 如上所述here我能够使用 Jetpack Compose 创建键盘 现在我将项目升级后alpha 11 to alpha 12代码坏了 并且仍然被破坏beta 01 并且每当我尝试打开键盘时都会收到以下错误 java l