Android Kotlin-如何设置微调框选择的项目 [英] Android Kotlin - How to set Spinner selected item

查看:61
本文介绍了Android Kotlin-如何设置微调框选择的项目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have a spinner populated with array of strings from 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中.下次打开应用程序时,如何重新设置值?我只保存了值,而不保存它在微调器列表中的位置.

When user selects something, I save it to SharedPreferences. How do I set the value back when the app is opened next time? I have only the value saved, not its position in spinner's list.´

如果我只是做spinner.Units.adapter来获得适配器,那么一个人如何安全地铸造SpinnerAdapter!到ArrayAdapter?还是这种错误的方法?

If I just do spinner.Units.adapter to get the adapter, how does one safely cast SpinnerAdapter! to ArrayAdapter? Or is this wrong approach?

推荐答案

好,您也需要发布适配器代码,但是在这里,我给出了一个示例,说明如何在适配器中进行操作.

Well you need to post the adapter code as well but here I am giving a sample how I will do in adapter.

 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())
                }
            }

        }
    }

因此,基本上我是在 spinner 上设置 onItemSelectedListener 并侦听值变化,然后将其设置在model/pojo中以持久化并在 onBindViewHolder中分配用于设置后退值.

so basically I am setting a onItemSelectedListener on spinner and listening for value changes and then setting it in model/pojo for persisting and assigning in onBindViewHolder for setting back values.

这篇关于Android Kotlin-如何设置微调框选择的项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆