在运行时从位图列表中选择可绘制对象的简洁方法?

Clean way of selecting drawable from a list of bitmaps at runtime?

所以我有一个国家/地区 ISO 代码列表("US"、"UK"、"AU"...),我想根据 ISO 使用不同的可绘制对象我得到的代码。现在我的解决方案是使用一个大的 switch 语句

switch(iso){
    case "AU":
    icon = R.drawable.al_au;
etc...

这似乎很笨拙而且是不好的做法。有更清洁的方法吗?我唯一的另一个想法是从 iso 代码中形成可绘制的名称并使用反射,但我认为那会非常低效。

如果您的可绘制对象可以遵循命名约定,那么您可以这样做

要获取 Drawable 对象本身:

iconDrawable = getResources().getDrawable(
                   getResouces().getIdentifier("al_" + iso.toLowerCase(),
                                        "drawable", getPackageName()));

仅获取 Drawable 标识符:

icon = getResouces().getIdentifier(
           "al_" + iso.toLowerCase(), "drawable", getPackageName());

只是想添加一个 hacky-hacky 的东西 :) 只要您可以提供连续名称的排序列表,您就可以将一个项目的索引添加到第一个项目。

icon = R.drawable.al_au + Arrays.asList("AU","PL","US").indexOf(iso);