如何将drawable存储为可以通过键/名称访问的值

时间:2017-03-18 00:31:55

标签: android android-drawable android-resources

我从数据库中获取了一个名称列表,我想为每个名称分配一个图像。 我发现我们可以使用int resID = getResources().getIdentifier(imgName , "drawable", getPackageName());但是我很少需要将一个图像分配给不同的名称。

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

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

  

我要做的是将执行时间保持在最低限度   可能的。

1 个答案:

答案 0 :(得分:0)

正如问题评论和下一个用户所述:我认为最好的解决方案是在Hashtable中加入对应。

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数据修改相关联:添加元素,更新元素(我甚至不确定更新),删除元素。由于您的哈希似乎是固定的,因此没有成本(内存使用除外)并且访问几乎是[常量,而不是线性大小],就像您在数组中获得位置一样直接。

所以我认为这是您需要的解决方案。 你可以有一个有多个键的drawable,这不是问题。但是,一个键总是导致一个drawable。

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

编辑: 由于您需要为每个片段提供此哈希表,因此您需要创建一个抽象类,您的每个片段将从该类继承,并在该类中将此hastable声明为受保护。因此,每个子类都能够获得它。您也可以将此哈希表设为私有,并实现一个函数&#34; Drawable getDrawableFromName(String name)&#34;从可恶的人那里撤回抽签。

我强烈建议你为你的活动提供一个抽象的主要子类,以防你需要在活动中做这样的事情。