Java Android数据绑定:为什么getVariable()没有更新?
我已经开始为一个新项目使用数据绑定。我已经能够使用binding.setVariable(myVariable)在EditText中为一个经典用户表单(lastname、firstname、email…)设置值 我想按用户保存编辑过的信息,所以我尝试使用binding.getVariable()。但在用户编辑编辑文本后,不会更新值(lastname、firstname…)。那么,有没有可能像这样使用它,而我做得不对,或者我们只能像这样更新编辑文本Java Android数据绑定:为什么getVariable()没有更新?,java,android,data-binding,Java,Android,Data Binding,我已经开始为一个新项目使用数据绑定。我已经能够使用binding.setVariable(myVariable)在EditText中为一个经典用户表单(lastname、firstname、email…)设置值 我想按用户保存编辑过的信息,所以我尝试使用binding.getVariable()。但在用户编辑编辑文本后,不会更新值(lastname、firstname…)。那么,有没有可能像这样使用它,而我做得不对,或者我们只能像这样更新编辑文本 String name = binding.ed
String name = binding.editText_lastname.getText().toString();
下面是我保存数据的方法(顺便说一下,我使用的是Reformation2和Realm):
谢谢 您的表达式是双向数据绑定表达式吗?e、 g.
android:text=“@={variable}”
是的,在我的xml中我有android:text=“@={userViewModel.firstname}”,例如,它应该可以工作。每当用户更改文本时,您应该看到调用了UserViewModel.setFirstname()
。如果没有setter,则应更新该字段。如果用户为null,您将不会看到任何错误,所以一定要检查它。此外,请确认您正在检查UserViewModel,而不是域。如果您的UserViewModel在值更改时不更新域,则可能看不到值的更改。您的表达式是双向数据绑定表达式吗?e、 g.android:text=“@={variable}”
是的,在我的xml中我有android:text=“@={userViewModel.firstname}”,例如,它应该可以工作。每当用户更改文本时,您应该看到调用了UserViewModel.setFirstname()
。如果没有setter,则应更新该字段。如果用户为null,您将不会看到任何错误,所以一定要检查它。此外,请确认您正在检查UserViewModel,而不是域。如果您的UserViewModel在值更改时不更新域,则您可能看不到值的更改。
public void saveBtnClick(View view) {
String name = binding.lastname.getText().toString(); //here I have the new value, after I edited the EditText
ProfileREST profileREST = LoginREST.retrofit.create(ProfileREST.class);
profileREST.updateUser(new ProfileBody(binding.getUserviewmodel().getUser()))
.enqueue(new Callback<User>() { //here I'm getting User object using data binding, values haven't been updated
@Override
public void onResponse(Call<User> call, Response<User> response) {
realm.beginTransaction();
user.firstname = binding.getUserviewmodel().getUser().firstname;
user.lastname = binding.getUserviewmodel().getUser().firstname;
user.phoneNumber = binding.getUserviewmodel().getUser().firstname;
user.isDarkMode = binding.getUserviewmodel().getUser().isDarkMode;
realm.commitTransaction();
}
@Override
public void onFailure(Call<User> call, Throwable t) {
Toast.makeText(EditProfileActivity.this, getString(R.string.network_error), Toast.LENGTH_SHORT).show();
}
});
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_edit_profile);
binding.getRoot().requestFocus();
setSupportActionBar(binding.toolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);
realm = Realm.getDefaultInstance();
user = realm.where(User.class).findFirst();
if(user != null) {
UserViewModel userViewModel = new UserViewModel(user);
binding.setUserviewmodel(userViewModel);
}
}