Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在ViewModel类中保存文本框中的用户输入?_Android_Xml_Kotlin_Mvvm_Android Room - Fatal编程技术网

Android 如何在ViewModel类中保存文本框中的用户输入?

Android 如何在ViewModel类中保存文本框中的用户输入?,android,xml,kotlin,mvvm,android-room,Android,Xml,Kotlin,Mvvm,Android Room,通过以下教程,我在日志应用程序中建立了一个房间数据库。我使用数据绑定将ViewModel绑定到片段和XML布局文件。在我的ViewModel类中,有一个onSave函数调用我的DAO insert函数。我设置了onclick侦听器,以便在按下save按钮时在ViewModel中调用onSave函数 但是我的用户输入从来没有进入ViewModel,所以onSave什么也不保存。代码如下: class TextEditorViewModel (val persistenceService: Jour

通过以下教程,我在日志应用程序中建立了一个房间数据库。我使用数据绑定将ViewModel绑定到片段和XML布局文件。在我的ViewModel类中,有一个onSave函数调用我的DAO insert函数。我设置了onclick侦听器,以便在按下save按钮时在ViewModel中调用onSave函数

但是我的用户输入从来没有进入ViewModel,所以onSave什么也不保存。代码如下:

class TextEditorViewModel (val persistenceService: JournalEntryPersistenceService,
                            application: Application): AndroidViewModel(application) {
    // This is for canceling coroutines when viewModel is destroyed
    private var viewModelJob = Job()
    private val uiScope = CoroutineScope(Dispatchers.Main + viewModelJob)
    private var journalEntry = MutableLiveData<JournalEntryDataClass?>()
        init {
            initializeJournalEntry()
        }

    fun onSave(entry: JournalEntryDataClass) {
        uiScope.launch {
            persistenceService.insert(entry)
        }
    }

现在,我意识到我的journalEditTextBox文本在创建片段时被分配,因此没有数据。所以我本质上是向onSave()函数发送一个空字符串。但是我觉得我完全不知道如何才能做到这一点。

您需要在setOnClickListener中创建val文本

    binding.saveButton.setOnClickListener() { 
    var text = binding.journalEditTextBox.text.toString()
    var journalEntry = JournalEntryDataClass(text) 
  textEditorViewModel.onSave(journalEntry) }
    binding.saveButton.setOnClickListener() { 
    var text = binding.journalEditTextBox.text.toString()
    var journalEntry = JournalEntryDataClass(text) 
  textEditorViewModel.onSave(journalEntry) }