我有一个使用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?或者这是错误的做法?
答案 0 :(得分:0)
你需要发布适配器代码,但在这里我将给出一个示例我将如何在适配器中进行。
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
中保留和分配以设置返回值。