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

  • 相关阅读:
    JAVA内存管理
    计算机网络面试题一
    计算机网络面试题二
    【有容云干货-容器系列】补脑专用,容器生态圈脑图大放送
    PPT | Docker定义存储-让应用无痛运行
    有容云-容器安全,六招解决
    新IT运维时代 | Docker运维之最佳实践-下篇
    新IT运维时代 | Docker运维之最佳实践-上篇
    有容云-【原理】Docker存储驱动之AUFS
    【有容云案例系列】基于Jenkins和Kubernetes的CI工作流
  • 原文地址:https://www.cnblogs.com/gelandesprung/p/4232240.html
Copyright © 2011-2022 走看看