Android Kotlin 获取所选微调项的值

Android Kotlin Get Value of Selected Spinner Item

我正在使用 AndroidStudio 4.1.1kotlin

我在尝试获取微调器中所选项目的值时遇到问题 view/item。我的第一次尝试,许多线程都说要这样做,是:

val spinner = findViewById<Spinner>(R.id.wMuscleGroup) as Spinner
val selectedText = spinner.getSelectedItem().toString()

这对我不起作用。 selectedTextToastprintln

中不显示任何内容

我也试过这个,我也发现了很多线程:

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 nullnull.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 函数中使用它。