android kotlin 中的 customViews - 可以在 init 块中初始化吗?
android customViews in kotlin - is it ok to initialize in the init block?
我很困惑为什么没有人在 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 块与在每个构造函数中调用它的对比。我看到没有人在网上这样做,我想知道为什么?
在 init
块中膨胀视图没有任何问题(我在自定义视图中这样做)就像 @JvmOVerloads
.
没有任何问题一样
是的,完全没问题,我自己多次使用这种方法并且没有遇到任何问题。
我目前正在使用的示例之一:
class MaterialSearchBar (context: Context, val attributeSet: AttributeSet) : Toolbar(context, attributeSet) {
init {
inflate(context, R.layout.material_search_toolbar, this)
updateUi()
requestFocus()
setUpListeners()
}
//...
}
我很困惑为什么没有人在 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 块与在每个构造函数中调用它的对比。我看到没有人在网上这样做,我想知道为什么?
在 init
块中膨胀视图没有任何问题(我在自定义视图中这样做)就像 @JvmOVerloads
.
是的,完全没问题,我自己多次使用这种方法并且没有遇到任何问题。
我目前正在使用的示例之一:
class MaterialSearchBar (context: Context, val attributeSet: AttributeSet) : Toolbar(context, attributeSet) { init { inflate(context, R.layout.material_search_toolbar, this) updateUi() requestFocus() setUpListeners() } //... }