Kotlin中的android customViews-是否可以在init块中初始化?

时间:2019-06-15 04:11:44

标签: android android-custom-view

我很困惑,为什么没人在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块与在每个构造函数中调用它。我看不到有人在网上这样做,我想知道为什么吗?

2 个答案:

答案 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没问题。