У меня есть список собак, и когда я нажимаю на конкретную собаку из списка, я вижу детали. Однако по какой-то причине текстовые представления (dogName, dogPurpose, dogLifespan и др. c.) Не обновлены. Фрагмент сведений отображает только значения по умолчанию, заданные макетом XML. В чем может быть проблема?
class DetailFragment : Fragment() {
private var dogUuid = 0
private lateinit var viewModel: DetailViewModel
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
arguments?.let {
dogUuid = DetailFragmentArgs.fromBundle(it).dogUuid
}
viewModel = ViewModelProviders.of(this).get(DetailViewModel::class.java)
viewModel.fetch(dogUuid)
observeViewModel()
}
private fun observeViewModel(){
viewModel.dogLiveData.observe(this, Observer{ dog ->
dog?.let {
dogName.text = dog.dogBreed
dogPurpose.text = dog.bredFor
dogTemperament.text = dog.temperament
dogLifespan.text = dog.lifeSpan
context?.let {dogImage.loadImage(dog.imageUrl, getProgressDrawable(it))}
}
})
}
}
Это DetailViewModel.
class DetailViewModel(application: Application): BaseViewModel(application) {
val dogLiveData = MutableLiveData<DogBreed>()
fun fetch(uuid: Int){
launch {
val dog = DogDatabase(getApplication()).dogDao().getDog(uuid)
dogLiveData.value = dog
}
}
}
Вот моя реализация сопрограмм.
abstract class BaseViewModel(application: Application): AndroidViewModel(application), CoroutineScope {
private val job = Job()
override val coroutineContext: CoroutineContext
get() = job + Dispatchers.Main
override fun onCleared() {
super.onCleared()
job.cancel()
}
}
Кажется, что Observer внутри наблюдатьViewModel () никогда не звонил. Почему?