亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用數據綁定從編輯文本中獲取字符串值

使用數據綁定從編輯文本中獲取字符串值

飲歌長嘯 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()

}

而已?,F在你的用戶名發生了變化,因為它在 viewmodel 中發生了變化。此外,如果您更改 EditText 中的文本,它會自動更新視圖模型中的 _username 字段?,F在您可以在布局中創建 onClick 函數并使用您在 editText(_username) 中輸入的值并進行一些有用的操作。


查看完整回答
反對 回復 2022-03-10
  • 2 回答
  • 0 關注
  • 191 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號