gpt4 book ai didi

android - 通过 URL 将图像加载到 RecyclerAdapter

转载 作者:行者123 更新时间:2023-11-30 00:05:13 26 4
gpt4 key购买 nike

我有一个返回 JSON 的 API,我想从这个 API 提供的 URL 加载图像。应将图像传递到适配器以进行回收 View 。现在所有包含 Imgae_URL 的项目都被我的适配器跳过,我真的不明白为什么。

if (json_img_url.isNotEmpty()) {
Executors.newSingleThreadExecutor().execute({
val conn = URL(json_img_url).openConnection()
conn.connect()
val iStream:InputStream = conn.getInputStream()
val img_bitmap:Bitmap? = BitmapFactory.decodeStream(iStream)
newItems.add(Item(....img_bitmap))
})
....
itemArrayAdapter.addItems(newItems)

网址:“https://s3.us-east-2.amazonaws.com/c....”使用的 URl 是有效的,S3 存储桶上的图像都是公开的。

If 语句返回 true(我用 Log.d 检查过)但是该项目没有出现在手机上,我没有收到错误,应用程序也没有崩溃就像项目从未存在过一样...

我知道有像 Picasso 或 Glide 这样的库,但即使有了它们我也无法让它工作,老实说我想完成这个任务而不必安装额外的包,只是感觉不对。

最佳答案

与 ListView 不同,无法通过 RecyclerView 适配器直接添加或删除项目。您需要直接对数据源进行更改并将任何更改通知适配器。在将不同的更改通知适配器时,有许多方法可供使用:

  • notifyItemChanged(int pos) : 通知该位置的项目已更改。
  • notifyItemInserted(int pos):通知反射(reflect)在位置的item已被新插入。
  • notifyItemRemoved(int pos):通知先前位于 position 的项目已从数据集中删除。
  • notifyDataSetChanged():通知数据集已更改。仅作为最后手段使用。

每次我们想在 RecyclerView 中添加或删除项目时,我们都需要显式地通知适配器该事件。与 ListView 适配器不同,RecyclerView 适配器不应依赖 notifyDataSetChanged(),因为应该使用更细粒度的操作。查看API documentation了解更多详情。

此外,如果您打算更新现有列表,请确保在进行任何更改之前获取当前的项目数。例如,应调用适配器上的 getItemCount() 来记录将要更改的第一个索引。

// record this value before making any changes to the existing list
int curSize = itemArrayAdapter.getItemCount();

// update the existing list
newItems.add(Item(....img_bitmap));

// curSize should represent the first element that got added
// newItems.size() represents the itemCount
itemArrayAdapter.notifyItemRangeInserted(curSize, newItems.size());

关于android - 通过 URL 将图像加载到 RecyclerAdapter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49152786/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com