android - Glide ModelLoader - 需要即时从网络获取图片 url
问题描述
目标: 我有一个模型列表,它在我正在加载图像的 recyclerview 中呈现。我的 Model 和 Model.imageUrl 来自两个不同的来源(我无法控制)。因此,对于每个模型,我都需要调用 model.getImageUrl() ,这是一个网络调用。所以我想在这里实现的是 recyclerviewAdapter.onBindViewHolder 将调用 Glide...load(model) ,这将触发我的 model.getImageUrl() 并且图像将在 model.getImageUrl() 完成后由 glide 加载。
到目前为止的研究: 据我所知,我需要按照此处的说明实现 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
但我不知道该关注哪一个。此外,我不想更改 glide 将 imageUrls 加载到 imageViews 的整体方式,因此我想以不改变 Glide 图像加载逻辑的方式编写 DataFetcher.loadData()。
我仍然很困惑,似乎无法开始。由于我已经为此苦苦挣扎了一周,因此我将非常感谢能够实现我的目标的一些示例代码。
解决方案
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)
}
推荐阅读
- python - How do I only keep files in a directory that contain a specific string?
- servicenow - 分配给案例表中的字段 - Servicenow
- ios - 如何在 Swift 中使用命令行
- r - 按月过滤不重复的 id
- angular - Angular 组件中的@Inject 是什么意思?
- python - 如何在 aiohttp 或烧瓶请求中写入全局变量(或单例)
- python - django 库中缺少 raise ImproperlyConfigured
- java - 使用正则表达式模式验证域和子域的正则表达式是什么?
- tsql - 执行 SP_Open 游标导致 SMSS 出现严重错误
- javascript - 返回后该方法又是谁调用了它自己?