具有视图绑定的 ComposeView

ComposeView with view binding

我在 XML 布局文件中添加了 ComposeView。我使用视图绑定在我的 Activity 中扩充此文件。当我尝试调用 binding.myComposeView.setContent { ... } 时,出现以下编译错误:Unresolved reference: setContent。当我查看生成的绑定文件时,myComposeView 的类型是 View 而不是 ComposeView。当我使用 findViewById<ComposeView>(R.id.myComposeView).setContent { ... } 时,一切正常。为什么绑定没有正确生成?如何使用 ComposeView 的视图绑定?

可能是您 activity 的 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")
    }
  }
}

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