Android 如何将可绘制文件存储为可通过键/名称访问的值
我从数据库中得到一个名字列表,我想给每个名字分配一个图像。 我发现我们可以使用Android 如何将可绘制文件存储为可通过键/名称访问的值,android,android-drawable,android-resources,Android,Android Drawable,Android Resources,我从数据库中得到一个名字列表,我想给每个名字分配一个图像。 我发现我们可以使用intresid=getResources()但很少有实例需要将一个图像指定给不同的名称 在上面的代码中,您可以通过名称获取可绘制文件的资源id。但我不想用不同的名称存储同一个图像,也不想使用任何数组 有没有办法通过我们为drawable指定的名称来获取对它的引用 我想做的是尽量减少执行时间 可能 正如问题注释中所述,对于下一个用户:我认为最好的解决方案是将对应关系放入哈希表中 Hashtable<String,
intresid=getResources()代码>但很少有实例需要将一个图像指定给不同的名称
在上面的代码中,您可以通过名称获取可绘制文件的资源id。但我不想用不同的名称存储同一个图像,也不想使用任何数组
有没有办法通过我们为drawable指定的名称来获取对它的引用
我想做的是尽量减少执行时间
可能
正如问题注释中所述,对于下一个用户:我认为最好的解决方案是将对应关系放入哈希表中
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映射=新的Hashtable(大小);
//为每对键/名称迭代-可绘制
地图放置(键,可绘制);
//然后,您可以使用以下名称轻松访问drawables:
可绘制d=map.get(键);
所有哈希表成本都与hastable数据修改相关:添加元素、更新元素(我甚至不确定是否更新)、删除元素。由于散列似乎是固定的,因此几乎没有成本(除了内存使用),访问几乎[恒定,而不是线性大小],就像在数组中给定位置一样直接
所以我认为这就是你需要的解决方案。
您可以有一个具有多个关键点的绘图设备,这不是问题。然而,一个关键总是导致一个可绘制的
记住那张地图;不复制值(此处的可绘制值),除非它是原始数据。因此,对可绘制对象的任何更改(如果发生某些更改)都将应用于具有相同可绘制对象的所有关键点。这可能不是问题,但您必须知道,如果您将哈希表用于其他用途
编辑:
由于您的每个片段都需要这个哈希表,因此您需要创建一个抽象类,您的每个片段都将从中继承,并将这个hastable声明为在该类中受保护。因此,每个子类都可以得到它。您还可以将此哈希表设置为私有,并实现一个函数“Drawable getDrawableFromName(String name)”,从hastable中检索Drawable
我强烈建议您为活动创建一个抽象的主子类,以防在活动中需要这样做。为什么不想使用数组?我不确定是否有一种方法可以在没有数组或类似数组的手动编码的情况下做到这一点。也许用一个hashmap?您也可以使用SQLite来存储它,但最后,它就像一个数组,使用数组会更好…因为有许多图像我存储在drawable中,如果我将其存储在数组中,我必须为每个名称循环数组,这会增加执行时间。然后使用哈希表(不是hashmap抱歉),它将以低成本直接从名称中为您提供drawable。问题是,我必须为使用相同值的每个片段实现哈希表。这些片段在具有不同选项卡的滑动视图中使用。因为我们在一个片段中得到了特定的键值,我必须用图像更新UI。有没有办法只实现一次hashtable并在不同的片段中使用它。是的,有。您只需使所有片段从抽象自定义片段类继承。然后将此哈希表定义为受保护的静态哈希表(如果不修改它,则定义为最终哈希表)。因此,您可以从所有片段访问它。对于这类问题,最好有一个抽象类,您的所有活动都从该抽象类继承(对于您的所有片段都从另一抽象类继承)。对于Android,不建议更新精度答案ShashMaps和哈希表。我不知道这一点。为什么不推荐?你能详细说明一下穆罕默德·阿提夫吗