[英]Static data-binding in Android [literals]
我創建了包含圖像和標題的自定義布局 。 要重用此布局,我使用的是<include>
標記。 問題是我甚至無法將字符串文字綁定到包含的布局中。 我試圖遵循這些說明 ,但沒有成功。
布局/ titlebar.xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable name="title" type="String"/>
<!-- <variable name="imgSrc" type="android.graphics.drawable.Drawable" /> -->
</data>
<LinearLayout ... >
<!-- <ImageView ... android:src="{imgSrc}" /> -->
<TextView ... android:text="@{title, default=DefaultTitle}" />
</LinearLayout>
</layout>
布局/ otherlayout.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:bind="http://schemas.android.com/apk/res-auto"
...
>
<!-- bind:imgSrc="@{@drawable/some_image}" -->
<include layout="@layout/titlebar"
bind:title="@{Example}" <---------- does not work
/>
...
</LinearLayout>
在gradle中,我為模塊啟用了數據綁定:
android {
...
dataBinding {
enabled = true
}
...
}
修復了基於@CzarMatt答案的layout / otherlayout.xml
<?xml version="1.0" encoding="utf-8"?>
<!--
layout with bindings has to be wrapped in <layout> tag so {LayoutName}Bindings
class can be auto-generated for binding purposes
xmlns:alias="http://schemas.android.com/apk/res-auto"
creates an "app namespace" for custom attributes
-->
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:bind="http://schemas.android.com/apk/res-auto">
<LinearLayout ... >
<!--
// if this layout is also using title "data variable"
// and we want to use default value if title is null
bind:title='@{title ?? "Settings"}
// passing literal reference into the binding
bind:title="@{@string/settings_constant}"
-->
<include layout="@layout/titlebar"
bind:title='@{"Settings"}'
/>
...
</LinearLayout>
</layout>
數據綁定需要通過DataBindingUtil
設置布局,如@RaviRupareliya建議的那樣,否則數據綁定將不起作用:
public class OtherActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.otherlayout);
DataBindingUtil.setContentView(this, R.layout.otherlayout);
}
...
}
來自文檔:
通過使用應用程序命名空間和屬性中的變量名,可以將變量傳遞到包含布局的包含布局的綁定中
這意味着,以下數據變量必須包含在titlebar
和其他otherlayout
XML文件中:
<data>
<variable name="title" type="java.lang.String"/>
</data>
並且<include>
應該看起來像這樣:
<include layout="@layout/titlebar"
bind:title="@{title}"/>
有關更多信息,請參閱數據綁定文檔:
https://developer.android.com/topic/libraries/data-binding/index.html#includes
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.