【问题标题】:Android Kotlin Get Value of Selected Spinner ItemAndroid Kotlin 获取选定 Spinner 项的值
【发布时间】:2021-01-04 00:31:13
【问题描述】:

我正在使用AndroidStudio 4.1.1kotlin

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

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")

这可行,我可以在我的 println 中看到 selectedString,在块内的 onItemSelected 函数中。但是,如何让这个值在这段代码之外被看到?我需要在类对象和数据库写入中使用这个值。我尝试在if (spinner != null) 之外/上方声明selectedString,但这似乎也不起作用。

感谢您的帮助。

【问题讨论】:

    标签: android kotlin android-spinner


    【解决方案1】:

    默认情况下,您的 Spinner 没有选择值。因此调用spinner.getSelectedItem() 返回nullnull.toString() 返回一个空字符串。

    只有当用户首先从 Spinner 中选择了一个选项时,您的代码才会起作用。您可以使用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<*>) {
    
             }
         }
    }
    
    

    【讨论】:

    • 谢谢。我在我的应用程序中使用模拟器。我运行它并在我的视图中从微调器中选择一个项目。我就是这样检查的。我可以通过 println 查看我在 onItemSelected 函数中选择的值。如果值在那里,我如何将它传递给 if (spinner != null) 之外的东西?
    • 您可以将其存储在全局变量中,并在用户选择微调器中的项目时设置该变量。
    • 我添加了一个将其存储在全局变量中的示例
    • 谢谢,@Subhrajyoti Sen 这正是我所需要的。我以为我在 if() 块之外声明了 var,但可能做错了什么。你的效果很好!!
    • 其实在测试了这个答案之后,我发现它不起作用。 selectedText 确实在 if() 块内发生了变化。令人沮丧
    【解决方案2】:

    如果你想尝试使用 selectedText,你应该在 onItemSelected 函数中使用它。

    【讨论】:

      猜你喜欢
      • 2023-03-02
      • 2018-10-23
      • 1970-01-01
      • 1970-01-01
      • 2011-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多