当前位置: 首页 > 知识库问答 >
问题:

Android Kotlin -如何设置微调选定的项目

宰父深
2023-03-14

我有一个微调器,里面填充了来自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" />

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

如果我只做旋转单位。适配器要获得适配器,如何安全地投射SpinnerAdapter!到ArrayAdapter?还是这是错误的方法?

共有2个答案

苏志
2023-03-14

派对有点晚了,但对于每个想要更紧凑和/或更漂亮解决方案的人来说都是如此;尝试查询放入适配器中的数组。

假设您已在 XML 或类字段中单独保存了值数组,并且您知道所选值但不知道位置,则可以使用 indexOf 方法和第一个 {...} 查询来获取位置。

所以,以你为例,可以这样实现:

fun setSpinnerSelectionByValue(value: String) {
    val xmlArray: Array<String> = context.resources.getStringArray(R.array.units) // get array from resources
    val spinner = findViewById<Spinner>(R.id.spinnerUnits) // get the spinner element

    spinner.setSelection(xmlArray.indexOf(
        xmlArray.first { elem -> elem == value } // find first element in array equal to value
    )) // get index of found element and use it as the position to set spinner to.
}

如果数组中没有元素等于 value 参数,则第一个查询将引发 NoSuchElement 异常,但将被忽略,位置将默认为 0。

如果在将数组插入微调器之前对数组进行了一些魔术处理,其中最常见的是插入空选择器,则很可能仍然使用上述技术获得正确位置的方法。

例如,当插入一个空选择器时,您可以简单地在< code>indexOf方法之后添加< code> 1,并且仍然可以在微调器中获得正确的位置。

司空健
2023-03-14

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

 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上设置一个< code > onItemSelectedListener 来监听值的变化,然后在model/pojo中设置它来持久化,在< code>onBindViewHolder中赋值来设置回值。

 类似资料:
  • 添加颜色微调器 更新片段 这是我第一次问问题,我是一名新的程序员,一直在尝试使用kotlin和java的android。我有一个应用程序,允许用户添加一件衣服,选项是通过微调器设置的。问题在于,当用户从保存的微调器中选择一个项目时,以及当我想要更新值时,如图所示,蓝色文字表示棕色是从“添加服装项目”微调器中选择的选项,但微调器显示灰色。是否有办法将微调器设置为棕色,而不是默认值。

  • 问题内容: 我有一个更新视图,在这里我需要预选存储在数据库中的微调框的值。 我当时的想法是这样的,但是没有方法,所以我被困住了。 问题答案: 假设你的名称为,并且其中包含以下选项之一:“某个值”。 要查找和比较微调器中“某些值”的位置,请使用以下命令:

  • 问题内容: 我有一个带有JavaFX 2的Java桌面应用程序,在我的FX中,我有一个TabPane。我想设置默认选项卡。换句话说,我想将一个选项卡设置为选中状态。我发现有多种方法可以找出选择了哪个标签,然后找到了,但我不知道如何使用它。 问题答案: 这是正确的方法。您可以从中获取默认值,也可以使用分配自己的实现。默认模型对于开始应该足够好。 将其存储在某些局部变量中后,您可以使用不同的选项来选择

  • 我有一个微调器,由字符串数组填充。xml,用户将其设置为某物,我将其保存到首选项-我希望在打印字符串时保存字符串,而不是位置。现在,当用户返回时,我想将微调器设置为先前选择的值。 如果我做了 这是可行的,但工作室警告我不要随意选角。有没有正确而漂亮的方法可以做到这一点?或者我必须从字符串资源数组中创建ArrayAdapter并在那里搜索吗?

  • 我是android开发新手。 我想连接(添加一个字符串到数组列表中的每个项目)并将其设置为我的微调器 我有两个阵列: 数组1= 数组2= 所以我设置只有Array1在这样的旋转: 现在,这是旋转器中显示的内容: 项目1 项目2 项目3 项目4 如何将数组2中的项添加到数组1中的项,以便在微调器中显示类似的内容 项目1、A 项目2,B 项目3,C 项目4,D 对于一个字符串,我可以这样做: 但这是一

  • 我有一个从数据库中填充的微调器。我想从列表中选择默认情况下选择的项目。我需要找出列表中的哪个项目(CursorAdapter)具有“默认离开”的值,并将其设置为所选值。 这是我在这个网站上搜索找到的“解决方案”。但是,我不能在CursorAdapter对象中使用“getPotion”。我尝试了ArrayAdapter,但是“在设置之前”后面的行注释错误为“android.widget.Simple