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;
		}

© 2012, 冰冻鱼. 请尊重作者劳动成果,复制转载保留本站链接! 应用开发笔记