所以我已经获得了国家ISO代码列表(" US"," UK"," AU" ...)我想要根据我给出的ISO代码,使用不同的drawable。现在我的解决方案就是使用大的switch语句
switch(iso){
case "AU":
icon = R.drawable.al_au;
etc...
这似乎是笨拙和糟糕的做法 - 是的。这样做有更干净的方法吗?我唯一的另一个想法就是从iso代码中形成可绘制的名称并使用反射,但我相信这样效率非常低。
答案 0 :(得分:2)
如果您的drawable可以遵循命名约定,那么您可以执行类似
的操作获取Drawable
对象本身:
iconDrawable = getResources().getDrawable(
getResouces().getIdentifier("al_" + iso.toLowerCase(),
"drawable", getPackageName()));
仅获取Drawable
标识符:
icon = getResouces().getIdentifier(
"al_" + iso.toLowerCase(), "drawable", getPackageName());
答案 1 :(得分:0)
只是想添加一个hacky-hacky的东西:)只要你能提供一个连续名字的排序列表,你就可以在第一个项目中添加一个项目的索引。
icon = R.drawable.al_au + Arrays.asList("AU","PL","US").indexOf(iso);