前言
在维护之前的项目时发现一段根据图片名称获取图片资源文件的代码在AndroidStudio中报cant resolve method错误,如下
R.mipmap mm = new R.mipmap();
Field field = null;
try {
field = mm.getClass().getDeclaredField("flag_" + country);
country_id = (int) field.get(mm);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
getClass()方法报红,虽然代码运行起来没影响,但报红是件很难受的事情,所以整理修改一下
根据文件名获取资源文件的两种方式
drawable和mipmap下方式相同,只需要将mipmap修改为drawable即可
- 方式一:
/**
* 根据图片名称获取图片的资源id的方法
* @param imageName
* @return
*/
public int getResourceId(String imageName){
Context ctx=getBaseContext();
int resId = getResources().getIdentifier(imageName, "mipmap" , ctx.getPackageName());
return resId;
}
- 方式二:
/**
* 根据图片名称获取图片的资源id的方法
* @param imageName
* @return
*/
public int getResourceByReflect(String imageName){
Class mipmap = R.mipmap.class;
Field field = null;
int resId;
try {
field = mipmap.getDeclaredField("flag_" + country);
resId = field.getInt(mipmap);
} catch (Exception e) {
resId =R.mipmap.default;
e.printStackTrace();
}
return resId;
}
实例应用
在项目中本地有很多个图片文件,根据服务器数据返回的数据来确定使用哪个图片。
项目中的图片实例如下:
方式一:
int country = goods_info.country;//服务器返回的数据
country_id = getResources().getIdentifier("flag_"+country, "mipmap" , getPackageName());
方式二:
int country = goods_info.country;//服务器返回的数据
Class mipmap = R.mipmap.class;
Field field = null;
try {
field = mipmap.getDeclaredField("flag_" + country);
country_id = field.getInt(mipmap);
} catch (Exception e) {
resId =R.mipmap.default;
e.printStackTrace();
}
上述实例中未封装出来,可以封装使用到项目中。