首页 > 解决方案 > Android Kotlin - 如何设置 Spinner 选定项

问题描述

我有一个微调器,其中填充了来自 XML 的字符串数组:

<Spinner
                android:id="@+id/spinnerUnits"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="8dp"
                android:entries="@array/units"
                app:layout_constraintStart_toEndOf="@+id/barrier3"
                app:layout_constraintTop_toBottomOf="@+id/labelGeneric" />

当用户选择某些内容时,我将其保存到 SharedPreferences。下次打开应用程序时如何设置该值?我只保存了值,而不是它在微调器列表中的位置。'

如果我只是做 spinner.Units.adapter 来获取适配器,那么如何安全地投射 SpinnerAdapter!到 ArrayAdapter?或者这是错误的方法?

标签: androidkotlinspinner

解决方案


好吧,您还需要发布适配器代码,但在这里我将给出一个示例,我将如何在适配器中进行操作。

 val adapterGender = ArrayAdapter<String>(context, layoutCode, context.resources.getStringArray(R.array.genderArray))

 override fun onBindViewHolder(holder: ViewHolder?, position: Int) {
        val data = listOfItems[holder!!.adapterPosition]
        holder.etName?.setText(data.name)
        holder.spGender?.adapter = adapterGender
        holder.spGender?.setSelection(adapterGender.getPosition(data.gender))
    }

{
        val etName: AppCompatEditText? = itemView?.findViewById(R.id.etName)
        val spGender: AppCompatSpinner? = itemView?.findViewById(R.id.spGender)

        init {
            //listener for gender selection
            spGender?.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
                override fun onNothingSelected(p0: AdapterView<*>?) {

                }

                override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) {
                    listOfItems[adapterPosition].gender = p0?.selectedItem.toString()
                    Log.d("TAG", p0?.selectedItem.toString())
                }
            }

        }
    }

所以基本上我onItemSelectedListener微调器上设置一个并监听值的变化,然后在模型/pojo中设置它以保持和分配onBindViewHolder以设置回值。


推荐阅读