Android Kotlin 获取所选微调项的值
Android Kotlin Get Value of Selected Spinner Item
我正在使用 AndroidStudio 4.1.1
和 kotlin
我在尝试获取微调器中所选项目的值时遇到问题 view/item。我的第一次尝试,许多线程都说要这样做,是:
val spinner = findViewById<Spinner>(R.id.wMuscleGroup) as Spinner
val selectedText = spinner.getSelectedItem().toString()
这对我不起作用。 selectedText
在 Toast
或 println
中不显示任何内容
我也试过这个,我也发现了很多线程:
val spinner = findViewById<Spinner>(R.id.wMuscleGroup) as Spinner
if (spinner != null) {
val adapter = ArrayAdapter( this, android.R.layout.simple_spinner_item, muscleGroups )
spinner.adapter = adapter
spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
val selectedText = muscleGroups[position]
println("Muscle Group selected is $selectedText") // <-- this works
}
override fun onNothingSelected(parent: AdapterView<*>) {
// write code to perform some action
}
}
}
// selectedText is not seen here:
println("Muscle Group selected is $selectedText")
这有效,我可以在块内的 onItemSelected
函数中的 println 中看到 selectedString
。但是,我如何才能在这段代码之外看到这个值呢?我需要在 class 对象和数据库写入中使用此值。我试过声明 selectedString
outside/above if (spinner != null)
,但这似乎也不起作用。
感谢您的帮助。
您的微调器没有默认选择值。因此调用 spinner.getSelectedItem()
returns null
和 null.toString()
returns 一个空字符串。
只有当用户首先从微调器中选择了一个选项时,您的代码才会起作用。您可以使用 spinner.setSelection(position)
.
设置初始值
如果要在选区外使用选中的值,可以使用如下全局变量:
val spinner = findViewById<Spinner>(R.id.wMuscleGroup) as Spinner
var selectedText = muscleGroups.first() // as default
if (spinner != null) {
val adapter = ArrayAdapter( this, android.R.layout.simple_spinner_item, muscleGroups )
spinner.adapter = adapter
spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
selectedText = muscleGroups[position]
}
override fun onNothingSelected(parent: AdapterView<*>) {
}
}
}
如果您想尝试使用 selectedText 进行某些操作,您应该在 onItemSelected 函数中使用它。
我正在使用 AndroidStudio 4.1.1
和 kotlin
我在尝试获取微调器中所选项目的值时遇到问题 view/item。我的第一次尝试,许多线程都说要这样做,是:
val spinner = findViewById<Spinner>(R.id.wMuscleGroup) as Spinner
val selectedText = spinner.getSelectedItem().toString()
这对我不起作用。 selectedText
在 Toast
或 println
我也试过这个,我也发现了很多线程:
val spinner = findViewById<Spinner>(R.id.wMuscleGroup) as Spinner
if (spinner != null) {
val adapter = ArrayAdapter( this, android.R.layout.simple_spinner_item, muscleGroups )
spinner.adapter = adapter
spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
val selectedText = muscleGroups[position]
println("Muscle Group selected is $selectedText") // <-- this works
}
override fun onNothingSelected(parent: AdapterView<*>) {
// write code to perform some action
}
}
}
// selectedText is not seen here:
println("Muscle Group selected is $selectedText")
这有效,我可以在块内的 onItemSelected
函数中的 println 中看到 selectedString
。但是,我如何才能在这段代码之外看到这个值呢?我需要在 class 对象和数据库写入中使用此值。我试过声明 selectedString
outside/above if (spinner != null)
,但这似乎也不起作用。
感谢您的帮助。
您的微调器没有默认选择值。因此调用 spinner.getSelectedItem()
returns null
和 null.toString()
returns 一个空字符串。
只有当用户首先从微调器中选择了一个选项时,您的代码才会起作用。您可以使用 spinner.setSelection(position)
.
如果要在选区外使用选中的值,可以使用如下全局变量:
val spinner = findViewById<Spinner>(R.id.wMuscleGroup) as Spinner
var selectedText = muscleGroups.first() // as default
if (spinner != null) {
val adapter = ArrayAdapter( this, android.R.layout.simple_spinner_item, muscleGroups )
spinner.adapter = adapter
spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
selectedText = muscleGroups[position]
}
override fun onNothingSelected(parent: AdapterView<*>) {
}
}
}
如果您想尝试使用 selectedText 进行某些操作,您应该在 onItemSelected 函数中使用它。