Android登录屏幕:双向绑定EditText和TextView

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android登录屏幕:双向绑定EditText和TextView相关的知识,希望对你有一定的参考价值。

我试图用用户名+密码的数据绑定创建一个简单的登录屏幕。我只有单向绑定:我可以在代码中设置绑定变量并查看它们反映在UI中,但UI更改不会更改变量。

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/)来实现双向绑定。这是有效的,但这是否真的需要我想绑定的每个视图?!不是有一个更简单的方法吗?

答案

哦,双向绑定有一个“@ = {}”语法:O

android:text="@={userVm.username}"

代替

android:text="@{userVm.username}"

作品

以上是关于Android登录屏幕:双向绑定EditText和TextView的主要内容,如果未能解决你的问题,请参考以下文章

Android登录屏幕[关闭]

Android API 23 上未显示 EditText 视图

Android微调器使用XML进行数据绑定并显示所选值

登录界面AutoUtils 屏幕适配自定义Edittext(显示密码可见和一键清空)和 TextInputLayout的使用。

Android Oreo 禁用 EditText 的自动填充

将网页元素绑定到 Android 应用