2016-03-14 13 views
-2

我有一個ImageView,根據一個人的國籍顯示一個國家的國旗。 目前,我做了的switch-case語句那樣:根據Android中的變化值創建ImageView

public in getFlag() { 
     switch (nationality) { 
     case "GER": 
      return R.drawable.ger; 
     case "AUS": 
      return R.drawable.aus; 
     case "FRA": 
      return R.drawable.fra; 
    } 
} 

但也有更多的國家比3 ..所以我必須添加一個case語句爲每個國籍。 是有這樣的一個更好的機會..更像:

imgFlag.setImageResource(R.drawable.(participants.getNationality()); 

回答

0

與思考

try { 
    Field field = R.drawable.class.getField(participants.getNationality().toLowerCase()); 
} catch (NoSuchFieldException e) { 
    e.printStackTrace(); 
} 

try { 
    if(field != null) 
    imgFlag.setImageResource(field.getInt(null)); 
} catch (IllegalAccessException e) { 
    e.printStackTrace(); 
} 
1

下面的方法根據返回字符串資源ID:

public static int getResId(String resName, Class<?> c) { 

    try { 
     Field idField = c.getDeclaredField(resName); 
     return idField.getInt(idField); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     return -1; 
    } 
} 

你應該現在有:

int resourceId = getResId(nationality.toLowerCase(), YourCurrentActivity.this.getClass()); 
imgFlag.setImageResource(resourceId); 
+0

謝謝,但getResId方法需要String和Class 。但是,當我getResId(nationality.toLowerCase());我只傳遞一個字符串。 –

+0

我的不好,我忘了第二個參數,試試這個: int resourceId = getResId(nationality.toLowerCase()),YourCurrentActivity.this.getClass()); – Rob

+0

對不起,我是初學者.. 現在我得到一個致命的異常 Android.content.res.Resources $ NotFoundException:資源ID#0xffffffff –