通过数据绑定我设置文本字段的可见性.可见性取决于字符串为空或空或两者都不是. ?xml version="1.0" encoding="utf-8"?layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.a
<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <data> <import type="android.view.View"/> <variable name="viewModel" type="com.example.viewModel"/> </data> <android.support.constraint.ConstraintLayout android:layout_width="match_parent" android:layout_height="wrap_content" <TextView android:id="@+id/textField1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@{viewModel.data.text}" android:visibility="@{(viewModel.data.text == null || viewModel.data.text.empty) ? View.GONE : View.VISIBLE}" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent"/> </android.support.constraint.ConstraintLayout>
是否可以在数据元素中创建导入,以便我可以使用kotlin.text.StringsKt类中的isNullOrBlank()函数?
它希望能够像这样使用它:android:visibility =“@ {(viewModel.data.title.isNullOrBlank()?View.GONE:View.VISIBLE}”
一旦将数据绑定迁移到生成Kotlin代码而不是Java,Android数据绑定仍会从XML而不是Kotlin代码生成Java代码我相信我们将能够在XML中使用Kotlin扩展函数,这将非常酷.我相信,一旦Google大力推向Kotlin,这种情况就会发生.但就目前而言,你有以下
@Uli提到的TextUtils.isEmpty()不要忘记编写导入.
你不能在xml中使用StringKt.isNullOrBlack的原因:
以下是Kotlin String.kt的代码
@kotlin.internal.InlineOnly public inline fun CharSequence?.isNullOrEmpty(): Boolean { contract { returns(false) implies (this@isNullOrEmpty != null) } return this == null || this.length == 0 }
正如您所看到的,它是使用@ kotlin.internal.InlineOnly注释的,它表示此方法的Java生成代码将是私有的.
InlineOnly means that the Java method corresponding to this Kotlin
function is marked private so that Java code cannot access it (which
is the only way to call an inline function without actual inlining
it).
这意味着它不能从Java调用,并且由于数据绑定生成的代码在JAVA中,它也不能用于数据绑定. Thumb规则是你可以从JAVA访问的,你可以在数据绑定中使用它,如果不是只使用我想说的旧Java方式.