我想要包含一个简单的布局并将静态变量传递给它(此处为字符串资源)。我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'
我在项目的其余部分使用数据绑定,一切正常。我可以以编程方式设置值,但这个是静态的,我希望能够在布局文件中设置它。
答案 0 :(得分:2)
通常,您必须将数据绑定语句分配给要使用它的属性。如果默认的XML定义很好地支持属性本身,那么它将不会失败。但是当没有属性的定义时(除了带有数据绑定的显式和隐式)之外,该属性无法处理,你会发现你得到的错误。
因此,无论何时使用数据绑定特定属性(如包含布局的变量),都需要将其定义为
app:myAttr="@{...}"
Expression Language本身为定义的资源提供了一些很好的快捷方式。因此,在您的情况下,您可以在表达式中@string/firstValue
。这将解析为String
,而theValue
又分配给子布局中的变量> error:could not find or load main class Animal
。