Android根据字符串来读取动态读取资源ID

  • A+
所属分类:Android开发

场景

今天做到天气,遇到一个问题,就是天气有多中类型,这个时候需要与本地的图片ID对应起来,现在把所有天气类型ID导入到drawble中,我该如何高效的与服务器返回的类型ID对应起来?

简单粗暴:

  1. public id getResId(String name) {
  2.         if ("w_100".equals(name)) {
  3.             return R.drawable.w_100;
  4.         }else if("w_101".equals(name)){
  5.             return R.drawable.w_101;
  6.         }
  7.         ...
  8.         return -1;
  9.     }

 

这样写是不是有点太Low了。。。。。

于是我就找到了一个最高效的方法,今天在这里总结分享出来,希望更多遇到的小伙伴能使用到。

终极法:

  1. /**
  2.      * 根据字符串获取资源ID
  3.      *
  4.      * @param variableName
  5.      * @param c
  6.      * @return
  7.      */
  8.     public static int getResId(String variableName, Class<?> c) {
  9.         try {
  10.             Field idField = c.getDeclaredField(variableName);
  11.             return idField.getInt(idField);
  12.         } catch (Exception e) {
  13.             e.printStackTrace();
  14.             return -1;
  15.         }
  16.     }

 

使用很简单:

  1. ResUtils.getResId("w_100", R.drawable.class)

 

直接拿去使用吧,如对你有用,请在下面支持我一下,谢谢。