从 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
}
}
}
我有一个扩展自 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
}
}
}