我希望包含一个带数据绑定的布局。
我想使用enum
将id从java传递到我的布局,但我似乎无法找到正确的语法。
这是我的Fragment类,其中包含enum
和onCreateView()
:
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.fragment_item
并将其包含R.layout.fragment_item_A
(或其他类型)。
这是我在R.layout.fragment_item 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中编写绑定?
答案 0 :(得分:2)
我很确定你做不到。数据绑定需要编译类型的布局,以便它可以确定传递变量的类型等。
相反,我认为你可能会这样做:
<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>