android kotlin 中的 seekBar 无法创建 setOnSeekBarChangeListener

android seekBar in kotlin cant create setOnSeekBarChangeListener

嘿,我正在尝试制作一个简单的搜索栏,但我遇到了一些奇怪的问题。 大约一年前我用 kotlin 编写了一个应用程序,它与我现在所经历的不同。首先,为什么我只能用lateinit初始化?然后我只能访问 onCreate 中的变量?无论如何,我试图制作一个搜索栏,但出于某种原因 kotlin 不能像它理解我正在尝试做的那样识别它

代码:

class Generator : AppCompatActivity() {


lateinit var username: EditText
lateinit var app: EditText
lateinit var password: TextView

lateinit var caps: Switch
lateinit var numbers: Switch
lateinit var symbols: Switch

lateinit var seekbarvalue: TextView
lateinit var length: SeekBar

lateinit var generate: Button
lateinit var copy: Button
lateinit var save: Button
override fun onCreate(savedInstanceState: Bundle?) {

    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_generator)

    username = findViewById<EditText>(R.id.username)
    app = findViewById<EditText>(R.id.app)
    password = findViewById<TextView>(R.id.password)

    caps = findViewById<Switch>(R.id.caps)
    numbers = findViewById<Switch>(R.id.numbers)
    symbols = findViewById<Switch>(R.id.symbols)

    seekbarvalue = findViewById<TextView>(R.id.seekbarvalue)
    length = findViewById<SeekBar>(R.id.length)

    generate = findViewById<Button>(R.id.generate)
    copy = findViewById<Button>(R.id.copy)
    save = findViewById<Button>(R.id.save)

    length.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener){
        override fun onProgressChanged(p0: SeekBar?, p1: Int, p2: Boolean) {

        }

    }
}

}

您只能在 class' 方法之一中修改超出初始声明的变量,在这种情况下,onCreate 是您声明的唯一方法。

您必须在声明时为它们分配一个值,或者如果您不确定需要的值是什么,则将其设为可空(可选)/lateinit。使用 lateinit 并在初始化之前尝试使用变量会导致崩溃。

您可能需要查看此主题以获取更多信息:

 length.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
        override fun onProgressChanged(p0: SeekBar?, p1: Int, p2: Boolean) {

        }

        override fun onStartTrackingTouch(p0: SeekBar?) {
            TODO("Not yet implemented")
        }

        override fun onStopTrackingTouch(p0: SeekBar?) {
            TODO("Not yet implemented")
        }

    })