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

应用程序运行,但TextView没有得到更新这里是相关的代码。

activity_picker_dashboard.xml

    This layout has databinding   ..... 

这是layout_header.xml

          ...............   

这是我的模型ProfileResponse.java

 public class ProfileResponse { public Payload getPayLoad() { return payLoad; } @SerializedName("Payload") private Payload payLoad; public static class Payload { public String getProfileId() { return profileId; } public String getUserId() { return userId; } public String getFirstName() { return firstName; } public String getLastName() { return lastName; } @SerializedName("ProfileId") private String profileId; @SerializedName("UserId") private String userId; public void setFirstName(String firstName) { this.firstName = firstName; } public void setLastName(String lastName) { this.lastName = lastName; } @SerializedName("FirstName") private String firstName; @SerializedName("LastName") private String lastName; } } 

最后这是我的活动

  public class PickerDashboardActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_picker_dashboard); LayoutHeaderBinding binding = LayoutHeaderBinding.inflate(getLayoutInflater()); ProfileResponse.Payload profilePayload = new ProfileResponse.Payload(); profilePayload.setFirstName("Test"); binding.setProfilePayload(profilePayload); ButterKnife.bind(this); } 

请提出解决方案。 我已经尝试了很长一段时间了。 PS:我也用黄油刀。

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

如果要从常规布局中包含数据绑定布局,则需要找到布局的根视图并在其上调用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); } 

但是,最好将Activity的布局设置为数据绑定布局,而不必进行额外的工作:

            

然后您的绑定代码更简单,更不容易出错:

 @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数据绑定和butterknife在function上有很大的重叠,我建议选择其中一个,但不是两个。