如何在 android 数据绑定中从 class 导入 public 静态字段

how to import public static field from class in android data binding

我想从 android 布局数据绑定中的接口常量导入一些字符串。

Gradle 如果我使用这条线

构建失败
android:drawableRight="@{item.icon.equalsIgnoreCase(Constants.FOOD_TYPE_NON_VEG)? @drawable/ic_nonveg : @drawable/ic_veg}"

但下面的行有效

android:drawableRight="@{item.icon.equalsIgnoreCase(`nonveg`)? @drawable/ic_nonveg : @drawable/ic_veg}"

样本 xml 是

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data>

        <variable
            name="Constants"
            type="com.amelio.utils.Constants"/>

    </data>

    <TextView
        style="@style/tvVerySmall"
        android:layout_width="match_parent"
        android:drawableRight="@{item.icon.equalsIgnoreCase(`nonveg`)? @drawable/ic_nonveg : @drawable/ic_veg}"
        />

</layout>

常量接口是

public interface Constants {
    String FOOD_TYPE_NON_VEG  = "nonveg";
}

如何在数据绑定中从 xml 布局中的界面导入字符串?

使用import,而不是variable

<data>
    <import type="yourfullpackagepath.Constants"/>
</data>

在您的 publicinternal 常量存在的地方导入 class:

<data>
    <import type="com.ananth.nasaphotooftheday.utility.Constant"/>
    <variable
        name="viewModel"
        type="com.ananth.nasaphotooftheday.ui.main.MainViewModel" />
</data>

根据自己的用途使用,例如:

<ImageView
        android:id="@+id/image_fullscreen"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:src="@{(viewModel.media.type == Constant.MEDIA_TYPE_IMAGE) ? @drawable/ic_play : @drawable/ic_fullscreen}"
        android:layout_marginEnd="@dimen/spacing_large" />