Kam*_*icz 95 java data-binding android android-button android-databinding
上面的例子工作正常,因为1.0-rc4版修复了需要不必要变量的问题.
我完全按照文档中的描述进行操作,但它不起作用:
main.xml中:
<layout xmlns:andr...
<data>
</data>
<include layout="@layout/buttons"></include>
....
Run Code Online (Sandbox Code Playgroud)
buttons.xml:
<layout xmlns:andr...>
<data>
</data>
<Button
android:id="@+id/button"
...." />
Run Code Online (Sandbox Code Playgroud)
MyActivity.java:
... binding = DataBindingUtil.inflate...
binding.button; ->cannot resolve symbol 'button'
Run Code Online (Sandbox Code Playgroud)
如何获得按钮?
Geo*_*unt 172
问题是包含的布局不被认为是数据绑定布局.要使其作为一个,您需要传递一个变量:
buttons.xml:
<layout xmlns:andr...>
<data>
<variable name="foo" type="int"/>
</data>
<Button
android:id="@+id/button"
...." />
Run Code Online (Sandbox Code Playgroud)
main.xml中:
<layout xmlns:andr...
...
<include layout="@layout/buttons"
android:id="@+id/buttons"
app:foo="@{1}"/>
....
Run Code Online (Sandbox Code Playgroud)
然后,您可以通过按钮字段间接访问按钮:
MainBinding binding = MainBinding.inflate(getLayoutInflater());
binding.buttons.button
Run Code Online (Sandbox Code Playgroud)
从1.0-rc4(刚刚发布)开始,您不再需要变量.您可以将其简化为:
buttons.xml:
<layout xmlns:andr...>
<Button
android:id="@+id/button"
...." />
Run Code Online (Sandbox Code Playgroud)
main.xml中:
<layout xmlns:andr...
...
<include layout="@layout/buttons"
android:id="@+id/buttons"/>
....
Run Code Online (Sandbox Code Playgroud)
Khe*_*raj 26
只需设置
id为包含布局,然后使用binding.includedLayout.anyView.
此示例有助于将值传递给<include代码中的包含视图.
你有layout_common.xml,想要传递String给包含的布局.
您将String在布局中创建变量并将其引用String至TextView.
<data>
// declare fields
<variable
name="passedText"
type="String"/>
</data>
<TextView
android:id="@+id/textView"
...
android:text="@{passedText}"/> //set field to your view.
Run Code Online (Sandbox Code Playgroud)
将此布局包含在父布局中.给出id包含的布局,以便我们可以在绑定类中使用它.现在您可以将String传递passedText给您的<include标记.
activity_main.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">
<LinearLayout
..
>
<include
android:id="@+id/includedLayout"
layout="@layout/layout_common"
app:passedText="@{@string/app_name}" // here we pass any String
/>
</LinearLayout>
</layout>
Run Code Online (Sandbox Code Playgroud)
binding.includedLayout.textView在课堂上使用.您可以将任何变量传递给包含的布局,如上所述.
binding layout
注意-该两种布局(父&包括)应该是<layout,包裹着id
小智 13
只需为您的包含布局设置一个 id
<include
android:id="@+id/layout"
layout="@layout/buttons" />
Run Code Online (Sandbox Code Playgroud)
然后
BUTTONSBINDING binding = yourMainBinding.layout;
Run Code Online (Sandbox Code Playgroud)
BUTTONSBINDING 是 res/layout/buttons.xml
现在 :
binding.button.setText("simple_Way");
Run Code Online (Sandbox Code Playgroud)
小智 6
你可以让你的绑定在你的包含文件上工作,只需向它添加一个 ID,如下所示:
<include
android:id="@+id/loading"
layout="@layout/loading_layout"
bind:booleanVisibility="@{viewModel.showLoading}" />
Run Code Online (Sandbox Code Playgroud)
小智 5
另一个有趣的事情是,您可以将变量从活页夹传递到导入的布局,如下所示:
MainBinding binding = MainBinding.inflate(getLayoutInflater());
binding.buttons.setVariable(BR.varID, variable)
Run Code Online (Sandbox Code Playgroud)