kotlin - Kotlin 没有从绑定的 viewModel 中获取数据
问题描述
我正在尝试获取用户在自动完成视图中输入的数据,但我没有在 viewModel 中收到它。
有xml文件,
<layout xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="connectionViewModel"
type="com.example.soccerinfo.connection.ConnectionViewModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<AutoCompleteTextView
android:id="@+id/mail"
style="@style/textStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/enter_your_mail"
android:inputType="textEmailAddress"
android:text="@{connectionViewModel._connectionMailId}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.23000002" />
<Button
android:id="@+id/connectionButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/sign_in"
android:onClick="@{() -> connectionViewModel.onConnection()}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/mail" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
有viewModel,在insertUpdate 函数中我试图显示connectionMailId。当我想显示日志时,connectionMailId 显示一个空字符串
class ConnectionViewModel(
val database: ConnectionDataBaseDao,
private val app : Application) : AndroidViewModel(app){
private val _eventConnectionMade = MutableLiveData<Boolean>()
val eventConnectionMade : LiveData<Boolean>
get() = _eventConnectionMade
val _mails : MutableLiveData<List<Connection>> = MutableLiveData()
var _connectionMailId = String()
init {
viewModelScope.launch(Dispatchers.IO) {
_mails.postValue(database.getAllConnections())
}
_connectionMailId = ""
}
fun insertUpdateConnection(mail: String){
viewModelScope.launch(Dispatchers.IO){
Timber.i("Email binding : $_connectionMailId")
var connection = Connection(mail)
if (requireNotNull(_mails.value?.any { connection -> connection.mailId.equals(mail) })){
update(connection)
}else{
insert(connection)
}
}
}
我希望你能帮助非常感谢。
解决方案
尝试制作_connectionMailId
类型的实时数据String
:
var _connectionMailId = MutableLiveData<String>()
另外,使用两种方式数据绑定:
android:text="@={connectionViewModel._connectionMailId}"
推荐阅读
- python - Anaconda-navigator 分段错误(核心转储)Ubuntu
- c++ - 如果我不初始化变量,为什么会出现 SIGTSTP 错误?
- c++ - 如果我在另一个线程中将 tcp 套接字更改为非阻塞,我的程序在 Sleep() 之后返回 1
- gcc - 如何区分 syslog(2) 和 syslog(3)?
- python-3.x - Python 如果逻辑数据无法捕获
- macos - Intellij Terminal Zsh VI
- angular - 这对于在构建 Angular 应用程序时通过当前时间戳或哈希码缓存静态文件很有用
- python - 如何在 heappush 时检索 heapq 中元素的位置?
- webpack - 我需要同时使用Vue2和Vue3,Webpack如何配置别名
- powershell - PowerShell 挂起 - 对键盘操作没有响应