ComposeView 与视图绑定

Posted

技术标签:

【中文标题】ComposeView 与视图绑定【英文标题】:ComposeView with view binding 【发布时间】:2021-11-26 23:57:12 【问题描述】:

我在我的 XML 布局文件中添加了 ComposeView。我在我的活动中使用视图绑定来扩充这个文件。当我尝试调用binding.myComposeView.setContent ... 时,我收到以下编译错误:Unresolved reference: setContent。当我查看生成的绑定文件时,myComposeView 的类型是View 而不是ComposeView。当我使用findViewById<ComposeView>(R.id.myComposeView).setContent ... 时,一切正常。为什么绑定没有正确生成?我可以做些什么来使用带有ComposeView 的视图绑定?

【问题讨论】:

【参考方案1】:

事实证明,我有两个版本的相同布局:纵向和横向。我通过用ComposeView 替换LinearLayout 将肖像转换为Compose。但是,在水平布局中myComposeView 仍然是LinearLayout。这就是为什么创建的视图绑定类有一个类型为View 的字段myComposeView 而不是ComposeView。相同 id 的视图在两个布局版本中有不同的类型。

【讨论】:

【参考方案2】:

可能在您的活动的 onCreate 中设置绑定的方式存在问题。您是否使用以下代码行中的内容? :

override fun onCreate(savedInstanceState: Bundle?) 
  super.onCreate(savedInstanceState)
  binding = ActivityMainBinding.inflate(layoutInflater)
  val view = binding.root
  setContentView(view)

  binding.composeView.setContent 
    MaterialTheme 
      Text(text = "Hello World")
    
  

【讨论】:

这或多或少是我的做法,生成的绑定文件中composeView的类型是View而不是ComposeView。所有其他视图正常工作。问题出在 ComposeViews 上。

以上是关于ComposeView 与视图绑定的主要内容,如果未能解决你的问题,请参考以下文章

使用 compose 在 AndroidView 中使用片段时崩溃

无法将视图添加到 ComposeView;仅支持撰写内容

docker compose 卷类型 - 绑定与卷

将 compose 数据绑定与另一个数据绑定一起使用

尝试jetpack compose时显示错误:编译器后端并且无法由旧编译器加载

Durandal Compose:激活方法并不总是被调用