2015-09-04 16 views
0

当我在android中使用Data Binding API我想要移除样板代码,如findViewById数据绑定API如何设置字符串

但是我有一个简单的login_fragment需要user-nameuser-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并通过setUsersetPwUser-Classpw但是当我尝试检索用户或PW过来:

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

也许我误解了该ViewModel的目的,像我User-Class ...

回答

0

今天在Android的结合是'单程'。如果你需要EditText的使用观察者的值。

添加app:addTextChangedListener属性

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

和相应的getter的守望者:

public TextWatcher getLoginWatcher() { 
    return new SimpleTextWatcher() { 
     @Override 
     public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) { 
      loginText = charSequence.toString(); 
     } 
    }; 
} 
+0

谢谢谢..但我总是'数据绑定错误 - 在找不到访问com.example.user.lala.User.loginwatcher'我login.xml?你有好主意吗? – MMike

+0

你能看出观察者的定义和部分XML吗? – tse

0

你需要实现双向数据绑定序从取景/控制得值了。简单提供=标志@后实现双向绑定

android:text="@={logindata.user}" 
相关问题