如何将可绘制对象存储为可由 key/name 访问的值

How to store a drawable as values which can be accessed by a key/name

我从数据库中得到了一个名字列表,我想为每个名字分配一张图片。 我发现我们可以使用 int resID = getResources().getIdentifier(imgName , "drawable", getPackageName()); 但很少有我必须将一张图像分配给不同名称的情况。

在上面的代码中,您可以通过名称获取drawable 的资源id。但是我不想用不同的名称存储相同的图像,也不想使用任何数组。

有没有办法通过我们分配给它的名称来获取对 drawable 的引用?

What I'm trying to do is keep the execution time as less as possible.

如问题评论和下一位用户所述:我认为最好的解决方案是将对应关系放入哈希表中。

Hashtable<String, Drawable> map=new Hashtable<>(SIZE);
//iterates for each couple key/name - drawable you need
map.put(KEY, drawable);
//then you can access to drawables easily with the name :
Drawable d=map.get(KEY);

所有 hashTable 成本都与 hastable 数据修改相关联:添加元素、更新元素(我什至不确定更新)、删除元素。由于您的散列似乎是固定的,因此几乎没有任何成本(内存使用除外)并且访问几乎[恒定,大小不是线性]就像您在数组中的位置一样直接。

所以我认为这就是您需要的解决方案。 您可以拥有一个具有多个键的可绘制对象,这不是问题。但是,一个键总是导致一个可绘制对象。

记住 map.put();不复制值(这里的可绘制对象),除非它是原始数据。因此,对 drawable 的任何更改(如果发生某些更改)都将应用于具有相同 drawable 的所有键。这可能不是问题,但您必须知道,如果您将哈希表用于其他用途。

编辑: 由于您的每个片段都需要这个哈希表,因此您需要创建一个抽象 class,您的每个片段将从中继承,并声明此 hastable 在 class 中受保护。因此,每个subclass都能得到。您还可以将此哈希表设为私有,并实现一个函数 "Drawable getDrawableFromName(String name)" 从 hastable 中返回 drawable。

我强烈建议你为你的活动设置一个抽象的主子class,以防你需要在活动中做类似的事情。