标签:
情况是这样的:我需要把大约四五十个车标在一个listView中展示出来,一般在用ListView的时候撑死十来个图标,按不同分类使用,这倒好办,在创建view的时候使用R.drawable.xxx指定就行了。但我这是四五十个,要是一个个的指定我自己都得承认自己是SB。不过还好折腾了一天终于把这个问题解决了。不过有一个条件要满足:
所有的图标都放在drawable中,并且命名为logo_xxxx.png。不是png,是jpeg或者其它的都行。
Field[] drawableFields = R.drawable.class.getFields(); for (Field field : drawableFields){ if(field.getName().indexOf("logo_")!=-1){ item = new HashMap<String,Object>(); try { item.put("image", field.getInt(R.drawable.class)); item.put("name", field.getName()); item.put("state", false); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ list.add(item); } } }
应该还有其它的办法,比如直接指定名子加载,不过这个我不会用。
数据完整的加载到ListView,但是显示的名子是图片的名子,我想显示中文,就算显示英文也不能带个“logo_”,当然我还是不愿意手打个对应数组,于是同样的方法我决定再用一次。代码改成下面这样:
Field[] drawableFields = R.drawable.class.getFields(); Field[] stringFields = R.string.class.getFields(); Map<String,String> check_list = new HashMap<String,String>(); for(Field stringField:stringFields){ try { check_list.put(stringField.getName(), getResources().getString(stringField.getInt(R.string.class))); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } } for (Field field : drawableFields){ if(field.getName().indexOf("logo_")!=-1){ item = new HashMap<String,Object>(); try { item.put("image", field.getInt(R.drawable.class)); item.put("name", field.getName()); item.put("realName", check_list.get(field.getName())); item.put("state", false); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ list.add(item); } } }
这样我在显示的时候使用realName就可以了。不过我一直觉得这不是正统的方法。。
标签:
原文地址:http://www.cnblogs.com/gelandesprung/p/4232240.html