• 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就可以了。不过我一直觉得这不是正统的方法。。

  • 相关阅读:
    软件开发之需求调研方法论
    系统设计之编码概述
    unix/linux共享库(动态库)简介
    unix/linux静态库简介
    pytest的使用
    c语言中static的作用
    awk文本处理
    shell基本概念
    shell i/o交互及重定向
    shell常用分隔符及管道的用法
  • 原文地址:https://www.cnblogs.com/gelandesprung/p/4232240.html
Copyright © 2020-2023  润新知