【发布时间】:2020-11-16 21:01:32
【问题描述】:
我有两个微调器,第二个根据第一个的值更改它包含的项目数组。我需要另一个类中第二个微调器的当前项目(稍后我可能还需要另一个类中第一个微调器的当前项目,但现在我只是想得到第二个),所以我试图将其保存在变量中。
我全局声明
private lateinit var instrumentSpinner : Spinner
private lateinit var tuningSpinner : Spinner
internal lateinit var curTuning : String
这里是日志:
kotlin.UninitializedPropertyAccessException: lateinit property curTuning has not been initialized
at com.example.tuner.MainActivity.getCurTuning$app_debug(MainActivity.kt:31)
at com.example.tuner.PitchProcessing.tuneGuitar(PitchProcessing.kt:16)
at com.example.tuner.MainActivity$onCreate$pdh$1$1.run(MainActivity.kt:130)
at android.os.Handler.handleCallback(Unknown Source:2)
at android.os.Handler.dispatchMessage(Unknown Source:4)
at android.os.Looper.loop(Unknown Source:208)
at android.app.ActivityThread.main(Unknown Source:107)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(Unknown Source:11)
at com.android.internal.os.ZygoteInit.main(Unknown Source:274)
第 31 行是该变量 (curTuning) 的声明,PitchProcessing 中的第 16 行尝试将该变量与 MainActivity().curTuning 一起使用,并在第 130 行中调用 PitchProcessing。
这是我的 onCreate 中的两个微调器:
// initializing instrument spinner
instrumentSpinner = findViewById(R.id.instrument_spinner)
ArrayAdapter.createFromResource(
this,
R.array.instruments_array,
android.R.layout.simple_spinner_dropdown_item
).also { adapter ->
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
instrumentSpinner.adapter = adapter
}
instrumentSpinner.onItemSelectedListener = object : OnItemSelectedListener {
override fun onItemSelected(
parent: AdapterView<*>,
view: View?, pos: Int, id: Long
) {
when (parent.getItemAtPosition(pos).toString()) {
"Guitar" -> ArrayAdapter.createFromResource(
this@MainActivity,
R.array.tuning_array_guitar,
android.R.layout.simple_spinner_dropdown_item
).also { adapter ->
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
tuningSpinner.adapter = adapter
}
"Bass" -> ArrayAdapter.createFromResource(
this@MainActivity,
R.array.tuning_array_bass,
android.R.layout.simple_spinner_dropdown_item
).also { adapter ->
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
tuningSpinner.adapter = adapter
}
"Ukulele" -> ArrayAdapter.createFromResource(
this@MainActivity,
R.array.tuning_array_ukulele,
android.R.layout.simple_spinner_dropdown_item
).also { adapter ->
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
tuningSpinner.adapter = adapter
}
}
}
override fun onNothingSelected(parent: AdapterView<*>?) {
// Do nothing.
}
}
// initializing tuning spinner
tuningSpinner = findViewById(R.id.tuning_spinner)
ArrayAdapter.createFromResource(
this,
R.array.tuning_array_guitar,
android.R.layout.simple_spinner_dropdown_item
).also { adapter ->
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
tuningSpinner.adapter = adapter
}
tuningSpinner.onItemSelectedListener = object : OnItemSelectedListener {
override fun onItemSelected(
parent: AdapterView<*>,
view: View?, pos: Int, id: Long
) {
curTuning = tuningSpinner.getItemAtPosition(pos).toString()
}
override fun onNothingSelected(parent: AdapterView<*>?) {
// Do nothing.
}
}
有人可以帮我解决这个问题吗?我已经尝试了好几个小时,所以任何帮助将不胜感激,谢谢!
【问题讨论】:
标签: java android kotlin exception spinner