从 Kotlin synthetics 迁移 ConstraintLayout 视图绑定

ConstraintLayout view binding migration from Kotlin synthetics

我有一个扩展自 ConstraintLayout 的现有视图,它看起来像这样:

class LandingTemplate: ConstraintLayout {

  init {
    inflate(context, R.layout.landing_template, this)
    
    // Currently this 'recyclerView' is a kotlin synthetic
    recyclerView.run {
      // this sets up the recycler view
    }
}

我熟悉视图与活动和片段的绑定,但我找不到任何关于扩展布局案例的文档。 我的问题是,我应该用什么替换最初的 inflate 调用?

您可以获得如下布局充气器

 val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater

 val view = inflater.inflate(R.layout.landing_temple,this,true)

并且您也必须具有有效的视图结构

 LandingTemple(Context) // for creating view programmatically

 LandingTemple(Context,AttrributeSet) // to inflate view from xml , and 
 //the constructor context is one that you use to call `getSystemService

了解更多信息check

我假设您的构造函数提供了上下文并且您的 XML 布局的顶级标签是 <merge>。您可以使用绑定 class 的 inflate 来创建和添加子布局。

而且因为这一切都可以在构造函数中设置,所以您不需要像 Activity/Fragment 示例中那样的 lateinit var,而是可以使用 val

class LandingTemplate(context: Context, attrs: AttributeSet): ConstraintLayout(context, attrs) {

    private val binding = LandingTemplateBinding.inflate(LayoutInflater.from(context), this)

    init {
        binding.recyclerView.run {
            // this sets up the recycler view
        }
    }
}