繁体   English   中英

如何将 Kotlin 合成转换为循环中查看膨胀 XML 的绑定?

[英]How to convert Kotlin synthetics to view binding for inflated XML in a loop?

在尝试将应用程序从已失效的 Kotlin 合成转换为更新/支持的视图绑定方法时,我遇到了这个问题,其中布局在循环中膨胀并附加到目标父视图:

for (item in itemList) {
  val view = LayoutInflater.from(this).inflate(R.layout.imageitem_row, binding.linear, false)
  view.text1.text = item.title
  view.text2.text = item.pubdate
  binding.linear.addView(view)
}

由于 Kotlin 合成正在从代码中删除,因此text1text2不是view有效属性。 那么如何将视图绑定应用到这个膨胀的布局呢? 或者这在这里不起作用,我应该使用findViewById()代替text1text2

只是为了解释发生了什么 - 使用合成库,它基本上是在活动本身(或其他)中进行视图绑定。 对于布局中带有 id 的每个视图,它添加了一个您可以直接访问的属性。 所以你可以在当前范围内调用text1.text ,它会自动绑定到层次结构中的视图。

使用视图绑定,没有魔法,也没有将属性扔到顶级范围内。 相反,每个布局都有一个自动生成的类,并在名称的末尾添加了Binding ,例如ImageItemRowBinding 这个类有一个属性,每个视图都有一个id,所以它都封装在一个地方。

您可以在其上调用bind(view)以获取分配了所有属性的实例(通过在您传入的view层次结构中找到它们),或者如果您还没有视图并且想要它,则可以调用inflate在它具有约束力的同时膨胀它。 您最终会得到一个绑定类的实例,并分配了所有视图属性(并且您可以通过root属性访问视图层次结构的顶部)。

除此之外,基本上是一样的! 您只需要手动创建绑定实例,并通过它访问您的视图。 不要忘记,您可以使用像with(binding)binding.run { }类的 Kotlin 函数来处理其属性,而无需每次都使用binding前缀,因此如果方便,您几乎可以将原始的基于合成的代码包装起来

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM