当前位置: 首页 > 知识库问答 >
问题:

Android数据绑定使用包含标签

华星文
2023-03-14

上面的示例工作正常,因为版本1.0-rc4修复了需要不必要变量的问题。

我完全按照它在留档中的描述,它不起作用:

main.xml:

<layout xmlns:andr...
    <data>
    </data>
       <include layout="@layout/buttons"></include>
....

buttons.xml:

<layout xmlns:andr...>
    <data>
    </data>
    <Button
        android:id="@+id/button"
        ...." />

MyActivity.java:

 ... binding = DataBindingUtil.inflate...
binding.button; ->cannot resolve symbol 'button'

如何获取按钮?

共有3个答案

阎星华
2023-03-14

只需为include布局设置一个id

    <include
        android:id="@+id/layout"
        layout="@layout/buttons" />

然后

BUTTONSBINDING binding = yourMainBinding.layout;

BUTTONSBINDING是res/布局/buttons.xml

现在:

java prettyprint-override">binding.button.setText("simple_Way");
夏炎彬
2023-03-14

只需将id设置为包含的布局,并使用绑定即可。包括布局。anyView

这个例子帮助传递一个值到

您有layoucommon。xml,要将字符串传递到包含的布局。

您将在布局中创建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.

将此布局包含到父布局中。给包含的布局一个id,这样我们就可以在绑定类中使用它。现在,您可以将StringPassedText传递到您的

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>

>

  • 您可以在类中使用nowbinding.includedLayout.textView
  • 您可以像上面一样将任何变量传递给包含的布局。

    ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
    binding.includedLayout.textView.setText("text");
    

    注意两种布局(父布局)

  • 朱高超
    2023-03-14

    问题是,包含的布局没有被视为数据绑定布局。要使其成为一个变量,您需要传递一个变量:

    buttons.xml:

    <layout xmlns:andr...>
      <data>
        <variable name="foo" type="int"/>
      </data>
      <Button
        android:id="@+id/button"
        ...." />
    

    main.xml:

    <layout xmlns:andr...
    ...
       <include layout="@layout/buttons"
                android:id="@+id/buttons"
                app:foo="@{1}"/>
    ....
    

    然后,您可以通过按钮字段间接访问按钮:

    MainBinding binding = MainBinding.inflate(getLayoutInflater());
    binding.buttons.button
    

    从1.0-rc4(刚刚发布)开始,您不再需要该变量。您可以将其简化为:

    buttons.xml:

    <layout xmlns:andr...>
      <Button
        android:id="@+id/button"
        ...." />
    

    main.xml:

    <layout xmlns:andr...
    ...
       <include layout="@layout/buttons"
                android:id="@+id/buttons"/>
    ....
    
     类似资料:
    • 我想包括一个布局与数据绑定。 我想使用将id从java传递到布局,但我似乎找不到正确的语法。 这是我的片段类,带有和: 我想充气。分割项目,并使其包含

    • 问题内容: 更新说明: 上面的示例 正常工作 ,因为版本1.0-rc4 解决 了需要不必要的变量的问题。 原始问题: 我完全按照文档中的描述进行操作,但不起作用: main.xml: button.xml: MyActivity.java: 如何获得按钮? 问题答案: 问题在于所包含的布局没有被视为数据绑定布局。要使其成为一体,您需要传递一个变量: button.xml: main.xml: 然后

    • 我想使用数据绑定在折叠工具栏布局中设置滚动标志。这就是我想要实现的目标: 应用程序:layout_scrollFlags="@{isListHolty?捕捉:滚动|exitUntilCollapse|捕捉}" 但它给出了以下错误: 发现数据绑定错误。****/数据绑定错误****msg:标识符必须具有XML文件中的用户定义类型。snap不见了 所以基本上我只想在列表为空时关闭折叠效果。我可以在代码

    • 在使用新的数据绑定api时,我发现无法绑定到“style”属性。编译器抱怨找不到样式。然而,如果我简单地将样式设置为原样,它会发现它很好。例如: 不工作: 作品: 错误: 错误:任务“:app:compiledBugJavaWithJavaC”的执行失败。 JAVAlang.RuntimeException:发现数据绑定错误。****/数据绑定错误****msg:标识符必须具有XML文件中的用户定

    • 我想知道以下内容之间有什么区别: 与 有任何性能差异吗? 每个的首选用例是什么? 任何其他信息都将不胜感激! 谢谢!