为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

饮歌长啸 2022-03-10 16:01:46
我正在尝试使用一些数据绑定来放置一个 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"        />在视图模型(我的称为 LogginMV)中,我定义了一个private ObservableField<String> username = new ObservableField<>("");将用户输入的文本绑定到username我曾经username.get()尝试获取用户名,但我只得到""(我知道这是由于括号中的值new ObservableField<>(""),如果它是“测试”,我会得到“测试”)我确实创建了一个getter和setter,如下所示:public String getUsername(){    return username.get();}public void setUsername(ObservableField<String> username) {    this.username = username;    this.username.notifyChange();}我的问题是我无法弄清楚如何正确地进行绑定,所以我得到了用户输入的内容,而不是我在new ObservableField<>("").
查看完整描述

2 回答

?
临摹微笑

TA贡献1982条经验 获得超2个赞

我发现了一个很好的调整:


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


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

这将触发afterUserNameChange视图模型中的功能。


public void afterUserNameChange(CharSequence s)

{

    //Log.i("truc", s.toString());

    this.usrNm = s.toString();

}

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


查看完整回答
反对 回复 2022-03-10
?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

最好使用 LiveData 和 MutableLiveData 模式。在您的 ViewModel LoginVM 中声明:


private var _username = MutableLiveData<String?>()

var username: LiveData<String?> = null

   get() = _username

然后在 EditText 的 xml 中添加:


android:afterTextChanged="@{LoginVM::setUsername}"

android:text="@{LoginVM.username}"

所以还要在你的 LoginVM viemodel 中定义 setUsername 函数:


fun setUsername(s: Editable){

   _username.value = s.toString()

}

而已。现在你的用户名发生了变化,因为它在 viewmodel 中发生了变化。此外,如果您更改 EditText 中的文本,它会自动更新视图模型中的 _username 字段。现在您可以在布局中创建 onClick 函数并使用您在 editText(_username) 中输入的值并进行一些有用的操作。


查看完整回答
反对 回复 2022-03-10
  • 2 回答
  • 0 关注
  • 270 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号