2012-08-05 114 views
0

我有一个SQL数据库,从数据库我会得到名称字符串使用,我需要在列表中显示图标。 要做到这一点我也跟着两种方法,一种是:从资源文件夹检索图像

int id= context.getResources().getIdentifier(path + i.getIcon(),null, null); 

我发现这个方法没有太大的效率,所以我跟着一些其他的技术,即

try { 
      Class res = R.drawable.class; 
      Field field = res.getField(i.getIcon()); 
      drawableId = field.getInt(null); 
      holder.ContactImage.setImageResource(drawableId); 
     } 
     catch (Exception e) { 
      Log.e("MyTag", "Failure to get drawable id.", e); 
      holder.ContactImage.setImageResource(R.drawable.ic_all_contacts_green); 
     } 

这里的问题是,一段时间图标名称我从数据库中获得的数据将不会出现在Drawable文件夹中,那时候我觉得我的UI很慢,如果我尝试滚动,我尝试使用上述两种技术,但是我发现没有用。

如何克服这个问题,当图标丢失时,第一个方法抛出NULL,第二个抛出异常,但为什么这会花费太多时间呢? 如何防止我的UI中的呆滞,任何有效的技巧?

+2

你不应该使用反射API,因为它真的很慢。在Dalvik上,特别是 – nullpotent 2012-08-05 14:09:29

+1

我很困惑你想做什么。在'drawable'文件夹中检索drawable的ID通常是'R.drawable.id_value_of_drawable',其中drawable的文件名是'id_value_of_drawable.extension'。 – DeeV 2012-08-05 14:13:21

+0

嘿@AljoshaBre即使在我的手机也变慢:( – Naruto 2012-08-05 14:32:09

回答

0

要做到这一点我也跟着两种方法,一种是

我会建议:

context.getResources().getIdentifier(i.getIcon(), "drawable", context.getPackageName()) 

当图标丢失第一个方法抛出空,第二个显示例外

不要求一个不存在的图标。既然你知道,在编译时,确切的图标是否存在,你完全有能力不要求图标不存在。

如何防止呆滞的我的UI

使用Traceview找出究竟你的性能问题所在。有些人会反思 - 不管你是否明确或者(更好地)使用getIdentifier(),仍然有反思。理想情况下,您可以缓存getIdentifier()调用的结果。但除此之外,Traceview将帮助您找出困难。

+0

但我知道为什么会出现呆滞的原因,其原因在于要求缺少可绘制图标文件夹。但只是问缺少的图标getIdentifier方法使我的用户界面呆滞,为什么这样呢?..他们为什么不能改善这个? – Naruto 2012-08-05 15:10:06

+0

@LLL:“为什么这样?” - 我不知道,因为我会不要使用带有无效标识符的'getIdentifier()',为什么他们不能改进这个???“ - 大概是因为他们有更重要的事情要做。欢迎您找出性能问题的根源,然后贡献Android开源项目的一个补丁,可以改进它。 – CommonsWare 2012-08-05 15:20:28

相关问题