尽管我使用的是 MVVM 架构,但当我旋转屏幕时,微调器会重置。 在设置值时,我在 View 模型中设置了值,但微调器仍重置为其原始状态。
在主要 Activity 中我已经这样做了,
GetBusinessPartners.setOnItemSelectedListener(object:OnItemSelectedListener{
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
dealMealPreApproval.initsetSpinnerIndex(position)
}
override fun onNothingSelected(parent: AdapterView<*>?) {
TODO("Not yet implemented")
}
})
dealMealPreApproval.getSpinnerValue().observe(this@DealMealPreApproval, Observer {
GetBusinessPartners.setSelection(it)
})
在 View 模型中我已经这样做了
class MealPolicyViewModel : ViewModel() {
var businessPartners=MutableLiveData<ArrayList<BusinessPartnersModel>>()
var spinnerString=MutableLiveData<Int>()
fun initsetSpinnerIndex(valueOfSpinner:Int){
spinnerString.value=valueOfSpinner
Log.d("valueOfValueOFSPinner",valueOfSpinner.toString())
}
fun getSpinnerValue() : LiveData<Int>{
return spinnerString
}
}
最佳答案
对于像 double、boolean、string、int 这样的小数据,您应该像这样使用 onSavedInstance,对于大量数据,将使用 View 模型。
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putInt("MySPinner", GetBusinessPartners.getSelectedItemPosition());
}
然后在OnCreate方法中像这样getValue
var counter=0
if (savedInstanceState != null) {
counter = savedInstanceState.getInt("MySPinner", 0)
}
在 Spinner Adapter 调用 SetSelection 并在其中传递计数器之后,
ArrayAdapter<BusinessPartnersModel>(context, android.R.layout.simple_list_item_1, list)
GetBusinessPartners.setSelection(counter)
关于android - MVVM 架构 android 中的 Spinner 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68676539/