【问题标题】:Using Glide and a String Array to display images in Resource使用 Glide 和字符串数组在 Resource 中显示图像
【发布时间】:2020-06-05 20:38:27
【问题描述】:

目前我有一个使用RecyclerView 的应用程序,当单击其中一个项目时,它会使用 Glide 加载图像。这些都托管在网络服务器上,所有项目的 URL 都存储在字符串数组中。适配器确定哪个位置与哪个位置匹配并存储在“imageGallery”中下载图像,然后将其加载到应用程序中。首次下载后,它会被存储,并且每次按下该项目时都会重复使用该项目,但是您按下的每个新项目都必须定期下载。

这是对 URL 进行排序的字符串数组的示例

 <string-array name="gallery">
    <item>http://britishsheepbreeds.co.uk/app/gallery/badger_welsh_mountain.jpg</item>
    <item>http://britishsheepbreeds.co.uk/app/gallery/balwen.jpg</item>
    <item>http://britishsheepbreeds.co.uk/app/gallery/beltex.jpg</item>
</string-array>

在与一些人进行 Beta 测试后,人们认为在单击项目之前让图像在线并且不加载到应用程序中并不是一个好方法,所以我考虑了两个选项。

选项 1. 首次加载应用时下载所有图像,然后使用存储中的缓存/图像在以后加载。

选项 2. 将所有图像保存在 drawable 或 mipmap(或应用程序中的另一个目录)中,以便它们从应用程序存储中调用它们,而不是依赖互联网。

我试图通过修改我的字符串来做到这一点,但这不起作用

我更改了字符串数组中的一项以进行测试,并添加了一个 toast 以确保它正在调用正确的信息,但它仍然没有加载。

 <string-array name="gallery">
    <item>http://britishsheepbreeds.co.uk/app/gallery/badger_welsh_mountain.jpg</item>
    <item>http://britishsheepbreeds.co.uk/app/gallery/balwen.jpg</item>
    <item>R.mipmap.beltex</item>
</string-array>

滑行代码为:

Glide.with(this)
            .asBitmap()
            .load(imageGallery)
            .into(gallery);

资源文件夹:

Toast 消息显示它可以很好地从字符串数组中提取信息,但是引用似乎不起作用。

如果我将.load(imageGallery) 替换为.load(R.mipmap.beltex),则会为所有项目加载图像。

欢迎任何帮助。我究竟做错了什么?它几乎就像从字符串中引用不起作用一样。我是否必须解析字符串以使其作为参考字段工作。

【问题讨论】:

  • 它不起作用的原因有很多。我建议您使用选项 2。它简单快捷。
  • @sergkk 这就是我想要的,但它不能正常工作
  • 有很多方法可以实现选项 2。试试这个简单的方法: 1. 将图像添加到文件夹“drawable” 2. 创建类似 fun (position:int): if (position ==1 ) 返回 R.drawable.your_photo_name 3. stackoverflow.com/questions/42868036/…
  • 所以我已经有一个适配器,它将图像的字符串存储在值“imageGallery”中,以便已经在处理它。当我单击我更改的那个时,当 toast 设置为在 imageGallery 上显示值时,它会在 toast 中显示正确的文本,但是由于某种原因它不能作为链接使用
  • 就像我说的,如果我将它与字符串数组中的 URL 一起保留,那么一切正常,但是如果我将它从 url 更改为本地资源路径,它不会加载。将&lt;item&gt;http://britishsheepbreeds.co.uk/app/gallery/beltex.jpg&lt;/item&gt; 替换为&lt;item&gt;R.mipmap.beltex&lt;/item&gt; 使其无法正常工作。即使图像在那个位置。

标签: java android resources local android-glide


【解决方案1】:

您需要从名称中获取该图像的 id 才能加载它。

将数组项从 R.mipmap.beltex 替换为 beltex 并在设置图像时从名称中获取 id

int resId = getResources().getIdentifier(imageGallery, "mipmap",getPackageName());

Glide.with(this).load(resId).into(gallery);

【讨论】:

  • 工作就像一个魅力,我确信我必须将字符串更改为资源引用的东西。甚至尝试过 getResource 但它一直抛出错误,因为我没有使用正确的语法。谢谢。
  • 快速跟进。我也使用 glide 将图像推送到我的 Recyclerview。 Glide .load 略有不同,因为我必须在显示图像之前计算出项目的位置。我怎样才能在那里使用get资源?代码是.load(imagesArrayList.get(position).getmImages())
  • 您可以使用 holder.itemview.context.getresources() 或将您的活动传递给适配器并使用 activity.getresources()
猜你喜欢
  • 2019-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-21
  • 1970-01-01
  • 2017-02-06
  • 2016-09-29
  • 1970-01-01
相关资源
最近更新 更多