问题在于如何将数据绑定布局与常规布局混合在一起。
如果要包括常规布局中的数据绑定布局,则需要找到该布局的根视图并对其进行调用bind()
。也许是这样的:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_picker_dashboard);
View bindingRoot = findViewById(R.id.toolbar);
LayoutHeaderBinding binding = LayoutHeaderBinding.bind(bindingRoot);
ProfileResponse.Payload profilePayload = new ProfileResponse.Payload();
profilePayload.setFirstName("Test");
binding.setProfilePayload(profilePayload);
}
但是,最好将“活动”的布局设置为数据绑定布局,而不必进行额外的工作:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="profilePayload"
type="myms.models.ProfileResponse.Payload"/>
</data>
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- Top header -->
<include layout="@layout/layout_header" app:profilePayload="@{profilePayload}" />
<!-- DrawerLayout -->
</android.support.constraint.ConstraintLayout>
</layout>
然后,您的绑定代码更加简单,并且不易出错:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityPickerDashboardBinding binding =
DataBindingUtil.setContentView(this, R.layout.activity_picker_dashboard);
ProfileResponse.Payload profilePayload = new ProfileResponse.Payload();
profilePayload.setFirstName("Test");
binding.setProfilePayload(profilePayload);
}
另一方面,我认为Android数据绑定和黄油刀在功能上有很大的重叠,我建议您选择其中之一,但不要同时选择两者。