您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

内部类上的Android数据绑定未更新TextView

内部类上的Android数据绑定未更新TextView

问题在于如何将数据绑定布局与常规布局混合在一起。

如果要包括常规布局中的数据绑定布局,则需要找到该布局的根视图并对其进行调用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数据绑定和黄油刀在功能上有很大的重叠,我建议您选择其中之一,但不要同时选择两者。

其他 2022/1/1 18:34:39 有496人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶