【发布时间】:2015-11-30 14:24:59
【问题描述】:
当我在 android 中使用 Data Binding API 时,我想删除像 findViewById 这样的样板代码。
但是我有一个简单的 login_fragment,它需要一个 user-name 和一个 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 中的变量绑定到用户界面:
LoginData logindata = DataBindingUtil.bind(getView());
logindata.setLogindata(new User());
然后在我输入用户名和密码后,我点击注册,我希望数据绑定通过setUser 和setPw 自动更新User-Class 中的user 和pw 但是当我尝试检索用户或密码:
Log.e("user","" + logindata.getLogindata.getUser()); //output: user null
Log.e("pw","" + logindata.getLogindata.getPw()); //ditto
也许我误解了ViewModel 的用途,比如我的User-Class...
【问题讨论】:
标签: android data-binding android-databinding