目标: 我有一个模型列表,该列表呈现在recyclerview内,其中我正在滑行加载图像。 我的Model和Model.imageUrl来自两个不同的来源(我无法控制)。因此,对于每个模型,我需要调用model.getImageUrl(),这是一个网络调用。 所以我想在这里实现的是recyclerviewAdapter.onBindViewHolder将调用Glide ... load(model),这将触发我的model.getImageUrl(),并且在model.getImageUrl()完成后将通过glide加载图像。 / p>
到目前为止的研究: 据我了解,我需要按以下说明实施ModelLoader:https://bumptech.github.io/glide/tut/custom-modelloader.html
我尝试使用BaseGlideUrlLoader,但是在BaseGlideUrlLoader.getUrl()中调用model.getImageUrl()会导致策略冲突(可能是由于主线程上的网络调用),因为所有网络请求均应在DataFetcher.loadData()方法中完成
我尝试在此处查看DataFetcher的实现:https://github.com/bumptech/glide/search?p=2&q=implements+DataFetcher&unscoped_q=implements+DataFetcher
但是我不知道该跟随哪一个。另外,我也不想更改滑行整体上将imageUrls加载到imageViews的方式,因此我想以不改变Glide图像加载逻辑的方式编写DataFetcher.loadData()。
我仍然很困惑,似乎无法对此进行了解。 达到我的目标的一些示例代码将受到高度赞赏,因为我已经为此努力了一个星期。
答案 0 :(得分:0)
fun getImageUrl(callback: (String) -> Unit) {
//GET IMAGE URL AND RETURN IT WITH
callback(imageUrl)
}
然后在onBind方法调用中
getImageUrl {
//LOAD IMAGE WITH GLIDE. THE URL WILL BE CALLED ‘it’ AS BELOW
Glide.with(this).load(it).into(imageView)
}