当我在android中使用Data Binding API
我想要移除样板代码,如findViewById
。数据绑定API如何设置字符串
但是我有一个简单的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
的UI具有:
LoginData logindata = DataBindingUtil.bind(getView());
logindata.setLogindata(new User());
然后我输入用户名和密码后,点击注册,我希望数据绑定自动更新user
并通过setUser
和setPw
在User-Class
pw
但是当我尝试检索用户或PW过来:
Log.e("user","" + logindata.getLogindata.getUser()); //output: user null
Log.e("pw","" + logindata.getLogindata.getPw()); //ditto
也许我误解了该ViewModel
的目的,像我User-Class
...
谢谢谢..但我总是'数据绑定错误 - 在找不到访问com.example.user.lala.User.loginwatcher'我login.xml?你有好主意吗? – MMike
你能看出观察者的定义和部分XML吗? – tse