我正在尝试使用用户名+密码的数据绑定(bind)创建一个简单的登录屏幕。我只有单向绑定(bind):我可以在代码中设置绑定(bind)变量并在 UI 中看到它们的反射(reflect),但 UI 更改不会更改 var。
Activity
---
ActivityLoginBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_login);
binding.setLifecycleOwner(this);
mViewModel = ViewModelProviders.of(this).get(LoginViewModel.class);
ViewModel
---
public class UserViewModel {
public ObservableField<String> username = new ObservableField<>("");
public ObservableField<String> password = new ObservableField<>("");
public ObservableField<Boolean> doRemember = new ObservableField<>(false);
public UserViewModel(String username, String password, Boolean doRemember) {
this.username.set(username);
this.password.set(password);
this.doRemember.set(doRemember);
}
}
View
---
<EditText
android:text="@{userVm.username}"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:text="@{userVm.username}"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
我发现一个网站建议我使用 TextWatcher (https://www.bignerdranch.com/blog/two-way-data-binding-on-android-observing-your-view-with-xml/) 来实现双向绑定(bind)。这行得通,但是我想绑定(bind)到的每个 View 真的需要这个吗?!没有更简单的方法吗?
最佳答案
哦,双向绑定(bind)有一个“@={}”语法:O
android:text="@={userVm.username}"
代替
android:text="@{userVm.username}"
作品
关于Android登录屏幕: Two-way binding EditText and TextView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49113898/