android - 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?或者这是错误的方法?
解决方案
好吧,您还需要发布适配器代码,但在这里我将给出一个示例,我将如何在适配器中进行操作。
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
以设置回值。
推荐阅读
- grails - 检查 Grails 的服务方法是否已经使用特定参数运行
- python - Blender 2.92 进入“无响应”梦幻岛
- android - Flutter Firebase Functions:调用函数时出错
- jmeter - 是否可以使用 Jmeter 测试 OPC ua?
- go - 如何设计个性化错误,然后对其进行测试(与错误中的描述相反)?
- reactjs - 基本表单登录适用于浏览器请求,但不适用于 fetch / axios In React with CORS
- r - 如何获取列表中第 n 个项目的位置/索引,R
- sql - 不需要的连接结果(将一行与相应的后续行匹配)
- python - Flask Restful API 请求/响应时间监控
- c - 在不执行下一个任务的情况下自动调用退出函数