我在代码中遇到两个错误。一个是在私有瓦尔sharedView模型中,我一直得到“分类器'SharedViewModel'没有伴随对象,因此必须在此处初始化”。最后,在两行question.text = sharedViewmodel.question和question.text = sharedViewModel.answer中,我得到“类型不匹配。要求:可编辑!找到:字符串?”但是当我尝试将其更改为可编辑时,我在按钮click listener for question/answer.text.toString()下得到一个错误。有人知道如何修复这些错误吗?以下是我的代码:
package com.example.quest
import android.app.Activity
import android.content.Intent
import android.os.Bundle
import android.widget.EditText
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.preference.PreferenceManager
import com.google.android.material.floatingactionbutton.FloatingActionButton
class SecondActivity : AppCompatActivity() {
private val sharedViewModel: SharedViewModel by viewModels(SharedViewModel)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_second)
val question = findViewById<EditText>(R.id.question)
val answer = findViewById<EditText>(R.id.answer)
if(sharedViewModel.question != null) {
question.text = sharedViewModel.question
}
if(sharedViewModel.answer != null) {
answer.text = sharedViewModel.answer
}
findViewById<FloatingActionButton>(R.id.btn3).setOnClickListener {
sharedViewModel.question = question.text.toString()
sharedViewModel.answer = answer.text.toString()
val questiontext = question.text.toString()
val answertext = answer.text.toString()
val returnIntent = Intent()
returnIntent.putExtra("test", questiontext)
returnIntent.putExtra("test2", answertext)
setResult(Activity.RESULT_OK, returnIntent)
finish()
}
}
}
视图模型:
package com.example.quest
import androidx.lifecycle.ViewModel
class SharedViewModel : ViewModel() {
var question: String ?= null
var answer: String ?= null
}
2条答案
按热度按时间ix0qys7i1#
只需要使用
by viewModels()
而不传递类名,当你的ViewModel有一个空的构造函数时,你不需要传递任何东西。使用
question.setText(sharedViewModel.question)
代替question.text = sharedViewModel.question
。另一个也是一样。问题是在Java中为TextView定义了多个setText()
方法。Kotlin创建了一个属性,该属性的参数类型与getText()
的返回值匹配,getText()
返回Editable而不是String。因此TextView的属性访问语法只适用于Editables而不是String。wfveoks02#
SomethingViewModel:class.java
通常是一个拼写错误。注意全冒号,并确保它们总是两个,即SomethingViewModel::class.java