如何将绘图存储为可通过键/名称访问的值
我从数据库中获取名称列表,并且想要为每个名称分配一个图像。 我发现我们可以使用int resID = getResources().getIdentifier(imgName , "drawable", getPackageName());
,但是我不得不为一个名字分配一个图像。如何将绘图存储为可通过键/名称访问的值
在上面的代码中,您可以通过名称获取drawable的资源ID。但我不想用不同的名称存储相同的图像,而且我也不想使用任何数组。
有没有什么办法可以通过我们指定的名字来获取drawable的引用?
我想要做的是保持执行时间少于 可能。
正如问题评论中所述,对于下一个用户:我认为最好的解决方案是将对应关系放在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数据修改:添加元素,修改元素(我甚至不能确定的更新),删除元素。因为你的散列似乎是固定的,所以没有任何成本(除了内存使用)并且访问几乎是[恒定的,而不是线性大小]直接,就像你给出阵列中的位置一样。
所以我认为这是您需要的解决方案。 你可以绘制一个有多个键的键,这不是问题。然而,一个关键导致总是一个可绘制的。
请记住,map.put();没有重复值(这里可以绘制),除非它是一个原始数据。因此,对drawable进行的任何更改(如果发生某些更改)将应用于具有相同drawable的所有键。这可能不是问题,但是您必须知道,如果您使用散列表进行其他用法。
编辑: 由于您需要为每个片段使用这个散列表,因此您需要创建一个抽象类,每个片段都将从其继承,并将此hastable声明为该类中的受保护对象。因此,每个子类将能够得到它。你也可以将这个散列表设置为私有的,并实现一个函数“Drawable getDrawableFromName(String name)”,从hastable返回drawable。
我强烈建议你有一个抽象的主要子类为你的活动,如果你需要在活动中做这样的事情。
这个问题是我必须为每个片段实现散列表,我使用相同的值。这些片段是用于使用不同选项卡的滑动视图。因为我们在片段中获取了特定的关键值,所以我必须使用图像更新UI。有没有什么办法只实现一次散列表并将其用于不同的片段。 –
是的,有。你只需要让所有的片段都从一个抽象的自定义片段类继承而来。然后你将这个散列表定义为受保护的静态(最后如果你不修改它)。因此,您可以从您的所有片段中访问它。有一个抽象类从你的所有活动继承(而另一个为你的所有片段),这种问题总是一个很好的实践。更新精度的答案 – Feuby
hashmaps和hashtables不推荐用于Android –
为什么你不想使用数组?我不确定有没有一种方法可以做到这一点,没有数组或手动编码的东西看起来像数组。也许使用hashmap?你也可以使用SQLite来存储它,但最后它就像一个数组,并且这将更好地使用数组... – Feuby
因为有很多图像,我存储在drawable中,如果我将它存储在一个数组中我必须为每个名称循环数组,并增加执行时间。 –
然后使用散列表(不是hashmap抱歉),它会以低成本直接从名称给你绘图 – Feuby