Kra*_*ann 3 android kotlin android-databinding
通过数据绑定,我可以设置文本字段的可见性。可见性取决于字符串为null或为空,或两者都不为。
<?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>
Run Code Online (Sandbox Code Playgroud)
是否可以在数据元素中创建导入,以便可以使用类中的isNullOrBlank()函数kotlin.text.StringsKt?
希望能够像这样使用它: android:visibility="@{(viewModel.data.title.isNullOrBlank() ? View.GONE : View.VISIBLE}"
Android数据绑定仍然从XML而不是Kotlin代码生成Java代码,一旦将数据绑定迁移到生成Kotlin代码而不是Java,我相信我们将能够在XML中使用Kotlin扩展功能,这真的很酷。
我敢肯定,随着Google大力推销Kotlin,这很快就会实现。但是现在,您有
TextUtils.isEmpty() 正如@Uli所提到的,不要忘记编写导入。
无法在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
}
Run Code Online (Sandbox Code Playgroud)
如您所见,@kotlin.internal.InlineOnly其中带有注释,该方法的Java生成代码将是私有的。
InlineOnly表示与此Kotlin函数相对应的Java方法被标记为私有,因此Java代码无法访问它(这是在没有实际内联的情况下调用内联函数的唯一方法)。
这意味着它不能从Java调用,并且由于数据绑定生成的代码在JAVA中,因此也不能用于数据绑定。Thumb规则是您可以从JAVA访问的内容,如果不仅仅使用我会说的旧Java方式,则可以将其用于数据绑定。
| 归档时间: |
|
| 查看次数: |
794 次 |
| 最近记录: |