ListView中加载大量的图片

情况是这样的:我需要把大约四五十个车标在一个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就可以了。不过我一直觉得这不是正统的方法。。

原文地址:https://www.cnblogs.com/gelandesprung/p/4232240.html