【问题标题】:Android Kotlin - Issue to suppress safeUnbox warning for two-way binding valuesAndroid Kotlin - 抑制双向绑定值的 safeUnbox 警告的问题
【发布时间】:2019-12-04 19:49:33
【问题描述】:

专家,

我正在尝试抑制双向绑定属性 (Android/Kotlin) 的 safeUnbox 警告。为此,我为不同的数据类型创建了一个带有自定义拆箱函数的单例(见下文)。

我的构建失败并出现以下错误。这可能是因为 Kotlin 使用 kotlin.Boolean 作为“checked”变量的数据类型,而 Binding 功能使用 java.lang.Boolean。

非常感谢我如何解决此问题的任何建议。谢谢!

错误信息: ****/ 数据绑定错误 ****msg:cannot find method unbox(java.lang.Boolean) in class com.example.ui.bindingAdapters.InverseSafeUnboxBindingAdapter

ViewModel 定义:

var checked = MutableLiveData(false)

card_example.xml:

            <com.google.android.material.checkbox.MaterialCheckBox
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:checked="@={com.example.ui.bindingAdapters.InverseSafeUnboxBindingAdapter.unbox(vm.checked)}"/>

绑定适配器:

package com.example.ui.bindingAdapters

import androidx.databinding.InverseMethod


object InverseSafeUnboxBindingAdapter {
    @InverseMethod("boxBoolean")
    fun unbox(b: Boolean?): Boolean {
        return b as Boolean
    }

    fun boxBoolean(b: Boolean): Boolean? {
        return b
    }
}

【问题讨论】:

    标签: android kotlin data-binding android-databinding


    【解决方案1】:

    我确实找到了解决此问题的有效解决方案。诀窍是创建将 unbox 和 inverse 函数实现为 Java 文件的代码,而不是 Kotlin。

    我使用如下所示的代码创建了一个 Java 文件,并且能够在 xml 文件中使用它以及双向绑定变量。

    import androidx.databinding.InverseMethod;
    
    public class CustomSafeUnboxAdapter {
        @InverseMethod("boxBoolean")
        public static boolean unbox(Boolean boxed) {
            return (boxed != null) && boxed.booleanValue();
        }
    
        public static Boolean boxBoolean(boolean unboxed) {
            return unboxed ? Boolean.TRUE : Boolean.FALSE;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-09
      • 2015-04-13
      • 1970-01-01
      • 2015-08-05
      • 2020-11-26
      • 2011-11-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多