我很困惑,为什么没人在android自定义视图中使用init块来初始化和膨胀视图。让我们举一个我如何做的例子:
class MyCompoundView : ConstraintLayout {
constructor(p0: Context) : super(p0)
constructor(p0: Context, p1: AttributeSet?) : super(p0, p1)
constructor(p0: Context, p1: AttributeSet?, p2: Int) : super(p0, p1, p2)
init {
inflate(context, R.layout.my_view_container, this)
//etc
}
}
与我在网上看到的相反,这有什么问题吗?
class MyCompoundView : ConstraintLayout {
constructor(p0: Context) : super(p0){initialize()}
constructor(p0: Context, p1: AttributeSet?) : super(p0, p1){initialize()}
constructor(p0: Context, p1: AttributeSet?, p2: Int) : super(p0, p1, p2){initialize()}
private fun initialize() {
inflate(context, R.layout.ride_hail_otp_container, this)
}
}
ps。我不赞成在customViews中使用jvmOverload,所以无需提及。只想了解init块与在每个构造函数中调用它。我看不到有人在网上这样做,我想知道为什么吗?
答案 0 :(得分:1)
是的,这很好,我自己多次使用这种方法,并且没有遇到任何问题。
我当前正在使用的示例之一:
class MaterialSearchBar (context: Context, val attributeSet: AttributeSet) : Toolbar(context, attributeSet) {
init {
inflate(context, R.layout.material_search_toolbar, this)
updateUi()
requestFocus()
setUpListeners()
}
//...
}
答案 1 :(得分:0)
在init
块中放大视图(在我的自定义视图中完成)并没有错,就像@JvmOVerloads
没问题。