- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我是 Android 数据绑定(bind)库的新手。
我有一堆警告,例如:
warning: viewModel.someBoolean.getValue() is a boxed field but needs to be un-boxed to execute android:checked. This may cause NPE so Data Binding will safely unbox it. You can change the expression and explicitly wrap viewModel.someBoolean.getValue() with safeUnbox() to prevent the warning
定义如下:
在 View 模型中
val someBoolean: MutableLiveData<Boolean> = MutableLiveData()
在布局中
<RadioButton
android:id="@+id/someBooleanRadioButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:checked="@={viewModel.someBoolean}"
android:text="@string/boolean_description" />
我尝试通过添加 safeUnbox() 来修复它:
<RadioButton
android:id="@+id/someBooleanRadioButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:checked="@={safeUnbox(viewModel.someBoolean)}"
android:text="@string/boolean_description" />
但是我遇到了编译错误:
msg:cannot find method safeUnbox(java.lang.Boolean) in class android.databinding.ViewDataBinding
在gradle中已经定义好了
dataBinding {
enabled = true
}
和kapt 'com.android.databinding:compiler:3.1.4'
任何想法如何解决它?安卓工作室 3.1.4 Gradle 4.4 Kotlin 1.2.61
附言刚刚有重复的问题。所有的问题都是关于如何修复警告,但我的问题是如何在添加 safeUnbox()
最佳答案
当你有双向绑定(bind)时,你不能使用safeUnbox()
方式,因为safeUnbox()
will not be inverted .
<variable
name="enabled"
type="Boolean"/>
....
<Switch
android:checked="@={enabled}"
/>
解决方案一
将 Boolean
更改为原始类型 boolean
。这样它就永远不会为空,default value boolean
的值为 false。
<variable
name="enabled"
type="boolean"/>
方案二
很长的路要走safeBox 和safeUnbox 方法。 See here .
safeUnbox()
只检查空值并返回非空值。您可以看到以下数据绑定(bind)库中定义的方法。
public static int safeUnbox(java.lang.Integer boxed) {
return boxed == null ? 0 : (int)boxed;
}
public static long safeUnbox(java.lang.Long boxed) {
return boxed == null ? 0L : (long)boxed;
}
public static short safeUnbox(java.lang.Short boxed) {
return boxed == null ? 0 : (short)boxed;
}
public static byte safeUnbox(java.lang.Byte boxed) {
return boxed == null ? 0 : (byte)boxed;
}
public static char safeUnbox(java.lang.Character boxed) {
return boxed == null ? '\u0000' : (char)boxed;
}
public static double safeUnbox(java.lang.Double boxed) {
return boxed == null ? 0.0 : (double)boxed;
}
public static float safeUnbox(java.lang.Float boxed) {
return boxed == null ? 0f : (float)boxed;
}
public static boolean safeUnbox(java.lang.Boolean boxed) {
return boxed == null ? false : (boolean)boxed;
}
关于android - 在类 android.databinding.ViewDataBinding 中找不到方法 safeUnbox(java.lang.Boolean),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52251127/
这是 Android Studio 中的一个工作项目,今天当我打开项目时,它显示多个 BindingImpl 类的错误如下。每个 BindingImpl 类都有两种类型的错误。 第一个: error:
两个主要问题是: 为什么 ViewDataBinding没有类似 getVariable("variableName") 的方法它将查找一个变量并返回它,如果不存在具有该名称的变量,则返回 null。
我正在使用 Android 数据绑定(bind)库来绑定(bind)具有 的 xml 布局 布局.xml ... ... 在为
我正在编写一个 Robolectric 单元测试,它要求我使用被测试 View 数据绑定(bind)类 (ViewDataBinding) 下的 Activity ,不幸的是,不幸的是,我一直坚持它在
我定义了一个包含 2 个 ViewStubs 的布局。它们的定义如下: 在我的适配器中,我试图通过 DataBinding 库生成的 ViewDataBinding 访问 ViewStub,在我的
我正在使用 Android Studio 2.0 Preview 4。我正在使用 Android SDK 工具 25 rc1。无论我清理/重建项目多少次,此错误都会持续存在。 File-> Inval
1.I add databinding in android in build.gradle.app2.I add layout file to the xml code3.I import the
安卓工作室 3.6。金丝雀 12 build.gradle: buildscript { ext.kotlin_version = '1.3.50' ext.RETROFIT_VERS
我是 Android 数据绑定(bind)库的新手。 我有一堆警告,例如: warning: viewModel.someBoolean.getValue() is a boxed field but
异常(exception)情况如下: java.lang.NullPointerException: Attempt to read from field 'java.lang.Runnable an
我有一个 BaseFragment 类: abstract class BaseFragment: Fragment(), View.OnClickListener { private lat
我是一名优秀的程序员,十分优秀!