【问题标题】:how to initialize binding to be property (android viewmodel )?如何将绑定初始化为属性(android viewmodel)?
【发布时间】:2020-08-06 13:34:55
【问题描述】:

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

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

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

【问题讨论】:

  • so that it can be accessed for all methods不清楚你想做什么!

标签: kotlin mvvm viewmodel


【解决方案1】:

在 init{} 块中初始化属性

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

val binding: pendaftaranBinding

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

稍后在代码中初始化它

如果你不想在类的构造中初始化,而是在后面的代码中初始化它,你可以使用lateinit modifier:

lateinit var binding: pendaftaranBinding

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

以便所有方法都可以访问它

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

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

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

}

【讨论】:

  • 为什么还要将绑定对象放在伴随对象中?
  • @ThunderCock 检查代码前的段落和引用:)
【解决方案2】:

以便所有方法都可以访问它

如果我理解正确,您的意思是您想在其他方法中访问pendaftaranBinding 类型变量,那么您只需在类的主体中声明该变量即可。

例子:

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
    }
}

【讨论】:

    【解决方案3】:
    lateinit var binding: pendaftaranBinding
    
    init {
       binding = DataBindingUtil.inflate(inflater, R.layout.pendaftaran, container, false)
    }
    

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

    【讨论】:

      猜你喜欢
      • 2014-12-15
      • 2021-06-11
      • 1970-01-01
      • 1970-01-01
      • 2021-08-20
      • 1970-01-01
      • 2021-10-13
      • 1970-01-01
      • 2021-01-09
      相关资源
      最近更新 更多