以编程方式更改 Spinner 文本内容

Change Spinner Text content programmatically

我有一个微调器,我想找到一种方法来更改我的微调器的下拉菜单。我想通过代码更改我的文本内容,但我不知道该怎么做。

这是我的 Spinner 的结构:

val adapter: ArrayAdapter<String> = ArrayAdapter<String>(
                                        context,
                                        android.R.layout.simple_spinner_item, units1[i]
                                    )
                                    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
                                    val new_spin = Spinner(context)
                                    new_spin.setAdapter(adapter)

我想将微调器中的文本更改为不同的列表 (unit2)。

如果您想更改适配器显示的列表,您可以使用 clearaddAll 来更改数据。

对于这种情况,您需要确保不要将列表传递给 适配器的构造函数,否则调用 clearaddAll 将尝试修改原始列表。如果原来 list 是不可变的 (listOf) 它会抛出一个错误,如果它是可变的 (ArrayList) 你可能会得到意想不到的行为 因为它会修改原始源列表。

class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding
    private val arr1 = listOf("1","2","3")
    private val arr2 = listOf("a","b","c")

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        // If you pass an array in here, calling things like "clear"
        // or "addAll" will modify the original list passed in. Passing in
        // nothing means the adapter will hold its own unique list...
        val adapter = ArrayAdapter<String>(this, R.layout.simple_spinner_item)

        // ...and you can initialize the adapter's list using addAll
        adapter.addAll(arr1)

        binding.mySpinner.adapter = adapter

        binding.changeSpinnerText.setOnClickListener {
            // to change what is shown, clear the adapter's list
            // and add the new values to show

            adapter.clear() // remove the existing values
            adapter.addAll(arr2) // add the new values
        }
    }
}