通过xml

时间:2017-07-04 21:19:37

标签: android android-layout android-databinding

我想要包含一个简单的布局并将静态变量传递给它(此处为字符串资源)。我followed multiple examples没有运气。

main_layout.xml

<?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></data>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <include android:id="@+id/first_included" layout="@layout/included" app:theValue="@string/firstValue" />
        <include android:id="@+id/first_included" layout="@layout/included" app:theValue="@string/secondValue" />
    </LinearLayout>
</layout>

included.xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
    <data>
        <variable name="theValue" type="String" />
    </data>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@{theValue}"/>    
</layout>

这给了我编译错误

  

错误:找不到属性'theValue'的资源标识符   包'com.just.example'

我在项目的其余部分使用数据绑定,一切正常。我可以以编程方式设置值,但这个是静态的,我希望能够在布局文件中设置它。

1 个答案:

答案 0 :(得分:2)

通常,您必须将数据绑定语句分配给要使用它的属性。如果默认的XML定义很好地支持属性本身,那么它将不会失败。但是当没有属性的定义时(除了带有数据绑定的显式和隐式)之外,该属性无法处理,你会发现你得到的错误。

因此,无论何时使用数据绑定特定属性(如包含布局的变量),都需要将其定义为

app:myAttr="@{...}"

Expression Language本身为定义的资源提供了一些很好的快捷方式。因此,在您的情况下,您可以在表达式中@string/firstValue。这将解析为String,而theValue又分配给子布局中的变量> error:could not find or load main class Animal