问题描述
我试图按顺序订购一些同步与异步操作或对其进行同步。
- 填充微调器的初始默认值
- 进行网络调用并为微调器获取更多值(在模型类中使用协程,如果有帮助,可以返回作业对象)
- 进行网络调用以获取用户数据(在模型类中使用协程,如果有帮助,可以返回作业对象)
- 根据用户部门设置微调框的选择
问题:#3和#4可能首先执行结果,然后旋转器(#2)才有机会完全填充值,因此有时会出现超出范围的错误。
寻找一种解决方案,最好没有厄运的嵌套/金字塔。我已经在模型层中拥有了协程,我是否也需要在UI层中拥有另一组协程? (听起来不太优雅)
注意:
下面的所有块(1-4)都在数据绑定块内,以防万一有人使用方法提出解决方案。
val binding = FormBinding.inflate(inflater,container,false).apply {
// 1. Create adapter with a single initial value
val depts = hashMapOf(-1L to "--None Selected--")
ArrayAdapter(activity!!,android.R.layout.simple_spinner_item,ArrayList(depts.values)).also { adapter ->
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
spinner.adapter = adapter
}
//#2. Load more values into adapter (network call,uses coroutine)
model.findAllDepartments({
it?.let {
(spinner.adapter as? ArrayAdapter<String>)?.addAll(it.values)
}
Log.d("TAG","onCreateView: adapter loaded")
})
//3. Get User Profile data (network call,uses coroutine)
arguments?.getLong("id")?.let {
model.findById(it,{
user = it
Log.d("TAG","onCreateView: ${spinner.count} ${it?.dept?.first}")
})
}
//4. Set selection of the spinner
user?.dept?.let {
spinner.setSelection(it.first.toInt() + 1)
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)