0

当我Data Binding API在 android 中使用时,我想删除样板代码,例如findViewById.

但是我有一个简单的 login_fragment 需要 auser-name和 a user-pw。点击Sign Up它后应该得到相应的字符串并将其写入我的User-Class

public class User extends BaseObservable {
    private String user;
    private String pw;

    public User() {}

    @Bindable
    public String getUser() {
        return user;
    }

    @Bindable
    public String getPw() {
        return pw;
    }

    public void setUser(String user) {
        this.user = user;
        notifyPropertyChanged(com.example.myuser.lala.BR.user);
    }

    public void setPw(String pw) {
        this.pw = pw;
        notifyPropertyChanged(com.example.myuser.lala.BR.pw);
    }
}

我的 XML 布局:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data class="LoginData">
        <variable
            name="logindata"
            type="com.example.myname.lala.User" />
    </data>
<RelativeLayout
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

     <TextView
        android:text="@string/user_name"
        android:id="@+id/textView"
        style="@style/textview_user" />

    <EditText
        android:hint="@string/enter_name"
        android:id="@+id/editText2"
        android:text="@{logindata.user}"
        style="@style/edittext_user" />

    <TextView
        android:text="@string/password"
        android:id="@+id/textView2"
        style="@style/textview_pw" />

    <EditText
        android:id="@+id/editText3"
        android:hint="@string/enter_password"
        android:text="@{logindata.pw}"
        style="@style/edittext_pw" />

    <Button
        android:text="@string/login"
        android:id="@+id/button2"
        style="@style/login_button" />
</RelativeLayout>
</layout>

我将我的变量绑定xml-layout到 UI:

LoginData logindata = DataBindingUtil.bind(getView());
logindata.setLogindata(new User());

然后在我输入用户名和密码后,我点击注册,我希望数据绑定自动更新user并通过pw,但是当我尝试检索用户或密码时:User-ClasssetUsersetPw

Log.e("user","" + logindata.getLogindata.getUser()); //output: user null
Log.e("pw","" + logindata.getLogindata.getPw()); //ditto

也许我误解了ViewModel喜欢我的目的User-Class...

4

2 回答 2

0

今天,Android 中的绑定是“一种方式”。如果您需要 EditText 的值,请使用 watcher。

添加app:addTextChangedListener属性

        <EditText
            ....
            android:text="@{viewModel.loginText}"
            app:addTextChangedListener="@{viewModel.loginWatcher}" />

和相应的观察者吸气剂:

public TextWatcher getLoginWatcher() {
    return new SimpleTextWatcher() {
        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
            loginText = charSequence.toString();
        }
    };
}
于 2015-09-04T18:15:32.290 回答
0

您需要实现双向数据绑定才能从视图/控件中获取值。简单提供=符号后@实现双向绑定

android:text="@={logindata.user}"
于 2016-06-07T08:01:06.253 回答