如何从android数据绑定中的类导入公共静态字段

时间:2018-05-09 10:39:43

标签: android android-layout data-binding android-databinding

我想从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>

和Constants接口是

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

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

2 个答案:

答案 0 :(得分:8)

使用import,而不是variable

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

答案 1 :(得分:1)

导入存在您的publicinternal常量的类:

<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" />