【问题标题】:How to get value of the ObservableField in android如何在android中获取ObservableField的值
【发布时间】:2017-10-22 08:14:02
【问题描述】:

嗨,我的 java 代码中有这个 ObservableField。我想得到它的值,可以通过调用get方法来完成。

val email = ObservableField<String>()

这可以使用以下方法完成。我很困惑,不知道我应该在这里做一个吸气剂来获得它的价值吗?或者有不同的标准方法来获取 ObservableField 的值我也在我的应用程序中使用 RxJava。

fun login(view: View) {
    val emailVal = email.get()
}

【问题讨论】:

    标签: android kotlin rx-java rx-android android-databinding


    【解决方案1】:

    这正是委托的意义所在。 Kotlin 中的属性委托意味着拥有一个实现运算符函数 getValue 和可选的 setValue 的类,该函数将在访问或更新属性时调用。

    您的委托可能如下所示:

    class <T> ObservableDelegate
    {
        val field = ObservableField<T>()
        operator fun getValue(self: Any?, prop: KProperty<*>) : T
            = field.get()
        operator fun setValue(self: Any?, prop: KProperty<*>, value: T)
            = field.set(value)
    }
    

    然后您可以像这样使用委托:

    val email : String by ObservableDelegate()
    
    fun login(view: View) {
        val emailVal = email
    }
    

    在此处阅读有关属性委托的更多信息:https://kotlinlang.org/docs/reference/delegated-properties.html

    【讨论】:

      【解决方案2】:

      我认为使用email.get() 已经足够了。如果你真的想在你的代码中消除.get()的使用,你可以使用支持字段:

      val _email = ObservableField<String>()
      var email: String
          get() = _email.get()
          set(value) = _email.set(value)
      
      //use
      fun login(view: View) {
          val emailVal = email
      }
      

      【讨论】:

        猜你喜欢
        • 2017-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多