0%

Android开发 通过字符串变量名获取资源ID

情景:有几十张图片,存放在drawable目录下,通过Web Service可以取到要显示的图片文件名,通过这个文件名,来展示相应的图片。 两种方法:第一种是最笨的,写几十个if,else if,对比返回的文件名,确定要显示的图片的Resources ID. 第二种方法,用反射,这里介绍的就是第二种方法。 当我们在drawable目录下添加图片时,ADT会自动以该图片的文件名(不包括扩展名)为静态变量名,建立索引,打开gen目录下的R.java文件,可以发现,所有图片的索引都是R.drawable类下的静态变量。 我们就可通过Web Service返回的文件名(当然,要去掉扩展名的),用Java的反射机制,取到该静态变量的值,就是Resources ID,这样我们在程序中就可以直接使用了。

    public int getBigIconResourceId() {
            R.drawable drawables=new R.drawable();
            //默认的id
            int resId=0x7f02000b;
            try {
                //根据字符串字段名,取字段
                Field field=R.drawable.class.getField("big_1");
                //取值
                resId=(Integer)field.get(drawables);
            } catch (SecurityException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (NoSuchFieldException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IllegalArgumentException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return resId;
        }