Я пытаюсь использовать Glide для загрузки изображения во фрагмент. Я вызываю службу, которая возвращает URL-адрес изображения с помощью Retrofit и сопрограмм. Итак, мой фрагмент имеет что-то вроде:
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceBundle: Bundle?) : View? {
val binding = DataBindingUtil.inflate(...)
viewModel.retrieveImageUrl()
view.imageUrl.observe(viewLifecycleOwner, Observer {
imageUrl = it
})
binding.imageUrl = imageUrl
return binding.root
}
И мой адаптер привязки имеет
@BindingAdapter("imageResource")
fun loadImage(view: ImageView, url: String?) {
if(!url.isNullOrEmpty()) {
Glide.with(view).load(url).diskCacheStrategy(DiskCacheStrategy.NONE).skipMemoryCache(true).into(view)
}
}
Layout (сокращено для краткости)
<layout>
<data>
<variable
name="imageUrl"
type="String" />
</data>
<ImageView
app:imageResource="@{imageUrl}" />
</layout>
Все работает правильно, но привязки выполняются до установки imageUrl, поэтому изображение никогда не загружается. Есть ли простой способ обойти это? Или мне нужно сделать вызов для синхронного получения URL-адреса?