Android Kotlin-禁止双向绑定值的safeUnbox警告的问题

问题描述 投票:0回答:1

专家,

我正在尝试禁止双向绑定属性(Android / Kotlin)的safeUnbox警告。为此,我使用不同数据类型的自定义拆箱功能创建了一个单例(请参见下文)。

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

关于如何解决此问题的任何建议,我们将不胜感激。谢谢!

错误消息:**** /数据绑定错误**** msg:在com.example.ui.bindingAdapters.InverseSafeUnboxBindingAdapter类中找不到方法unbox(java.lang.Boolean)

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个回答
0
投票

我确实找到了解决此问题的可行解决方案。诀窍是创建将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;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.