首页 文章

使用数据绑定从“编辑文本”获取字符串值

提问于
浏览
0

我正在尝试使用一些数据绑定来实现MVVM结构 .

我已经为视图创建了以下xml文件(示例):

<data>
    <variable
        name="LoginVM"
        type="org.ledeme.animekeeper.LogginMV"/>

<EditText
        android:id = "@+id/input_loggin"
        android:text="@{LoginVM.username}"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:layout_marginTop="200sp"
        android:layout_centerHorizontal="true"
        android:hint="@string/login"
        android:width="200sp"
        android:inputType="text"
        android:textAlignment="center"
        android:singleLine="true"
        android:lines="1"
        android:maxLines="1"
        />

在View Model(我称之为LogginMV)中,我定义了一个

private ObservableField<String> username = new ObservableField<>("");

绑定用户输入的文本到 username

我使用 username.get() 尝试获取用户名,但我只得到 "" (我知道这是由于 new ObservableField<>("") 中的括号之间的值,如果它是"test",我会得到"test")

我确实创建了一个getter和setter,如下所示:

public String getUsername(){
    return username.get();
}
public void setUsername(ObservableField<String> username) {
    this.username = username;
    this.username.notifyChange();
}

我的问题是我无法弄清楚如何正确地进行绑定,所以我得到用户输入的内容而不是我在 new ObservableField<>("") 中定义的内容 .

1 回答

  • 1

    我找到了一个很好的调整:

    在视图(xml文件)中添加:

    android:afterTextChanged="@{(edtitable)->LoginVM.afterUserNameChange(edtitable)}"
    

    这将在视图模型中触发函数 afterUserNameChange .

    public void afterUserNameChange(CharSequence s)
    {
        //Log.i("truc", s.toString());
        this.usrNm = s.toString();
    }
    

    用户在 EditText 每次输入后触发此功能

相关问题