Android登录屏幕: Two-way binding EditText and TextView

标签 android mvvm observable mvp android-databinding

我正在尝试使用用户名+密码的数据绑定(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/

相关文章:

Angular 4、Angular-in-Memory-Web-API 和 Observables : createDb() returning Observable or Promise does not work

android - 是否/是否有适用于Android的标准程序包结构/层次结构做法?

Android - 跟踪通知 onclicked

c# - 如何从其 View 模型访问自定义控件依赖项属性

wpf - 全局键绑定(bind)到事件 View 的 View 模型中的命令

RXJs 服务返回多个 observables

angular - 当 api 返回 404 时,Observable Completed 不会被调用,当 api 失败时,有其他解决方案吗?

android - 禁用向下拖动通知栏的能力

java - ListView/Adapter 不显示最后一项

c# - MVVM: View 导航无法正常工作