Я проверял это.Странный!Работало нормально.Я публикую здесь пример кода, вы должны найти и найти свою проблему.
activity_sample.xml
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="response"
type="com.innovanathinklabs.sample.data.Response" />
</data>
<LinearLayout
...
>
<EditText
...
android:text="@={response.data.email}" />
</LinearLayout>
</layout>
Response.java (родительская модель)
public class Response extends BaseObservable {
private Data data;
private String message;
private String status;
public void setData(Data data) {
this.data = data;
}
public Data getData() {
return data;
}
public void setMessage(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
public void setStatus(String status) {
this.status = status;
}
public String getStatus() {
return status;
}
}
Data.java (дочерняя модель)
public class Data extends BaseObservable {
private String userId;
private String lastName;
private String firstName;
private String email;
public void setUserId(String userId) {
this.userId = userId;
}
public String getUserId() {
return userId;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getLastName() {
return lastName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getFirstName() {
return firstName;
}
public void setEmail(String email) {
this.email = email;
}
public String getEmail() {
return email;
}
}
ActivitySample.java
public class ActivitySample extends AppCompatActivity {
ActivitySampleBinding binding;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_sample);
// make dummy response data
Response response = new Response();
Data data = new Data();
data.setEmail("khermaj@gmail.com");
response.setData(data);
// pass dummy data in layout
binding.setResponse(response);
}
}
* Что нужно проверить:
- Убедитесь, что ваша модель должна расширяться
BaseObservable
для использования двусторонней привязки данных .Или вы можете использовать ObservableField . - имена переменных должны начинаться со строчной буквы.Необходимо проверить Java Naming Convensions .Вы взяли
variable name="MyParent"
- Вы получите
NullPointerException
, если вы не передали модель в Layout.Как и я binding.setResponse(response);
в onCreate()
.