I have an initialization block in onCreateView
, where some variables are assigned from SharedPreferences, DB or Network (currently from SharedPreferences).
I want to update views with these values in onViewCreated
. But they update with empty values before a coroutine in onCreateView
finishes. How to wait until the coroutine finishes in main thread?
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
...
GlobalScope.launch(Dispatchers.Main) {
val job = GlobalScope.launch(Dispatchers.IO) {
val task = async(Dispatchers.IO) {
settingsInteractor.getStationSearchCountry().let {
countryName = it.name
}
settingsInteractor.getStationSearchRegion().let {
regionName = it.name
}
}
task.await()
}
job.join()
}
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
country.updateCaption(countryName)
region.updateCaption(regionName)
}
UPDATE (20-05-2019)
Currently I don't use onViewCreated
. I write code in onCreate
and onCreateView
. In onCreateView
I access views this way: view.country.text = "abc"
and so on.