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

  • 相关阅读:
    NOIP2010 关押罪犯
    NOIP2010 乌龟棋
    static属性
    数组的拷贝
    数组在类中的声明与创建
    两个数组之间的引用
    java数组实现买彩票(二个一维数组的比较思想)
    java数组实现买彩票(通过标识符进行判断的思想)
    java数组实现买彩票(重复则重新遍历查询思想)
    java数组实现买彩票(平移覆盖思想)
  • 原文地址:https://www.cnblogs.com/gelandesprung/p/4232240.html
Copyright © 2011-2022 走看看