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

Android数据绑定:如何绑定布局标识符以包含

斜瑞
2023-03-14

我想包括一个布局与数据绑定。

我想使用enum将id从java传递到布局,但我似乎找不到正确的语法。

这是我的片段类,带有enumonCreateView()

private enum TYPE{
    A(R.layout.fragment_item_A),
    B(R.layout.fragment_item_B),
    C(R.layout.fragment_item_C);

    public final int id;
    TYPE(int id) {
        this.id = id;
    }
    private int getId(){
        return id;
    }
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    //...
    this.type = TYPE.A;
    FragmentItemBinding binding = DataBindingUtil.inflate(inflater, R.layout.fragment_item, container, false);
    tmpView = binding.getRoot();
    binding.setType(type);
    //...
    return tmpView;
}

我想充气。分割项目,并使其包含R.layout。片段项目(或其他类型)。

这是我在R布局中失败的尝试。片段_项XML文件:

<data>
    <variable name="type" type="com.dan.myapp.fragments.MyFragmentClass.TYPE"/>
...
</data>
<include layout="@{type.id}" <!-- layout="@layout/fragment_item_A"-->
         android:id="@+id/included_item"/>

我应该如何在include中编写绑定?

PS:也许答案在这篇文章或这篇文章中,但我没有找到...


共有1个答案

陆英毅
2023-03-14

我很确定你不能那样做。数据绑定需要编译类型的布局,以便确定传递变量等的类型。

相反,我认为你可以这样做:

<FrameLayout ...>
    <ViewStub android:layout="@layout/fragment_item_a"
              android:visibility="@{type == Type.A ? View.VISIBLE : View.GONE}" .../>
    <ViewStub android:layout="@layout/fragment_item_b"
              android:visibility="@{type == Type.B ? View.VISIBLE : View.GONE}" .../>
    <ViewStub android:layout="@layout/fragment_item_c"
              android:visibility="@{type == Type.C ? View.VISIBLE : View.GONE}" .../>
</FrameLayout>
 类似资料:
  • 上面的示例工作正常,因为版本1.0-rc4修复了需要不必要变量的问题。 我完全按照它在留档中的描述,它不起作用: main.xml: buttons.xml: MyActivity.java: 如何获取按钮?

  • 我正试图通过数据绑定来设置android中最小值为0、最大值为10的整数的限制。为此,我有一个可绑定的适配器,它通过两个侦听器设置一个整数的值,一个增加值,另一个减少值。最后,我想设置这个整数的极限,最小值为0,最大值为10。

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

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

  • attr绑定是用来为html元素绑定属性值的,这种绑定非常有用,例如我们需要想一个元素添加title属性,或者为img标签添加src属性。 示例代码: //.W片段 <a bind-attr="{ href: url, title: details }"> Report </a> //js片段 this.url=justep.Bind.observable("year-end.html"),

  • submit绑定只能用在form元素中,当form提交的时候被触发,并且默认阻止form的提交。因此我们通常在submit的处理函数中以ajax的方式提交form表单。 示例代码: //.W片段 <form bind-submit="doSomething"> ... form contents go here ... <button type="submit">Submit</butt