如何将绑定初始化为 属性 (android 视图模型)?

how to initialize binding to be property (android viewmodel )?

我希望变量绑定是一个 属性 以便所有方法都可以访问它,但我不知道如何初始化它 (kotlin)

 val binding: pendaftaranBinding=
        DataBindingUtil.inflate(inflater, R.layout.pendaftaran, container, false)

var binding: .........................
binding: pendaftaranBinding=
            DataBindingUtil.inflate(inflater, R.layout.pendaftaran, container, false)

在 init{} 块中初始化 属性

您可以分配 Type,然后在 init{} 块中执行一些任务后对其进行初始化。

val binding: pendaftaranBinding

init{
    ...
    binding = DataBindingUtil.inflate(inflater, R.layout.pendaftaran, container, false)
    ...
}

稍后在代码中初始化它

如果您不想在 class 的构造中进行初始化,而是稍后在代码中对其进行初始化,您可以使用 lateinit modifier:

lateinit var binding: pendaftaranBinding

fun someFunction() {
    ...
    binding = DataBindingUtil.inflate(inflater, R.layout.pendaftaran, container, false)
    ...
}

so that it can be accessed for all methods

我不明白这一行,好像你想要 java 中的静态属性之类的东西,在 class 之外初始化它。这可以通过在 kotlin 中使用伴随对象来完成:

class YourClass {
    companion object {
        lateinit var binding: pendaftaranBinding
    }
}

fun initializeBinding() {
    YourClass.binding =
        DataBindingUtil.inflate(inflater, R.layout.pendaftaran, container, false)

}

so that it can be accessed for all methods

如果我没理解错的话,你的意思是你想在其他方法中访问一个 pendaftaranBinding 类型的变量,那么你只需在 class 的主体中声明该变量即可。

示例:

class YourActivity : AppCompatActivity() {
     private lateinit var yourBinding: pendaftaranBinding

    override fun onCreate() {
       yourBinding = DataBindingUtil.inflate(inflater, R.layout.pendaftaran, container, false)
    }

    private fun yourOtherMethod() {
        yourBinding.yourView
    }
}
lateinit var binding: pendaftaranBinding

init {
   binding = DataBindingUtil.inflate(inflater, R.layout.pendaftaran, container, false)
}

您可以使用绑定委托请阅读:this 如果你想使用 val 而不是 var