首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据绑定API如何设置字符串

数据绑定API如何设置字符串
EN

Stack Overflow用户
提问于 2015-09-04 20:16:15
回答 2查看 1.6K关注 0票数 0

当我在android中使用Data Binding API时,我想删除像findViewById这样的样板代码。

然而,我有一个简单的login_fragment,它接受一个user-name和一个user-pw。单击Sign Up后,它应该会获得相应的字符串并将其写入到我的User-Class

代码语言:javascript
复制
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布局:

代码语言:javascript
复制
<?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:

代码语言:javascript
复制
LoginData logindata = DataBindingUtil.bind(getView());
logindata.setLogindata(new User());

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

代码语言:javascript
复制
Log.e("user","" + logindata.getLogindata.getUser()); //output: user null
Log.e("pw","" + logindata.getLogindata.getPw()); //ditto

也许我误解了像我的User-Class这样的ViewModel的用途。

EN

回答 2

Stack Overflow用户

发布于 2015-09-05 02:15:32

如今,Android中的绑定是“单向的”。如果您需要EditText的值,请使用watcher。

添加app:addTextChangedListener属性

代码语言:javascript
复制
        <EditText
            ....
            android:text="@{viewModel.loginText}"
            app:addTextChangedListener="@{viewModel.loginWatcher}" />

以及与watcher对应的getter:

代码语言:javascript
复制
public TextWatcher getLoginWatcher() {
    return new SimpleTextWatcher() {
        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
            loginText = charSequence.toString();
        }
    };
}
票数 0
EN

Stack Overflow用户

发布于 2016-06-07 16:01:06

您需要实现双向DataBinding,以便从视图/控件中获取返回值。简单地在@之后提供=签名来实现双向绑定

代码语言:javascript
复制
android:text="@={logindata.user}"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32397861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档