我有一个枚举类型Pet
的列表。
enum Pet
{
DOG, CAT, BIRD, FISH;
}
然后我在商店加载可用宠物列表,最终以List
List<Pet> availablePets;
宠物的数量会有所不同。因此,有时候商店会有DOG
和CAT
其他时间会有所有宠物。
问题是我必须显示宠物清单。因此,由于语言不同,我必须使用String资源显示宠物类型。
public void display()
{
CharSequence[] list = new CharSequence[availablePets.size()];
for(int i = 0; i < availablePets.size(); i++)
{
Pet pet = availablePets.get(i);
if(pet == Pet.DOG)
{
list[i] = getString(R.string.dog);
}
else if(pet == Pet.CAT)
{
list[i] = getString(R.string.cat);
}
...
}
// takes a CharSequence array
callUi(list);
}
我的问题是这不会扩展。一个新的宠物进入的那一刻,我必须修改大量的代码只是为了显示它。
那么如何使用String资源打印这个枚举列表?
答案 0 :(得分:0)
R.string.xxx值实际上是整数,然后由getString()用于查找要显示的相应字符串。所以你需要解决的问题是如何将你的枚举值(DOG,CAT等)映射到适当的整数。
有几种方法可以做到这一点:
Map<Pet, Integer> petTypeToNameMapping = new HashMap<>();
petTypeToNameMapping.put(Pet.DOG, R.string.dog);
...
list[i] = getString(petTypeToNameMapping.get(pet));
enum Pet {
DOG(R.string.dog), CAT(R.string.cat);
int nameResourceId;
Pet(int nameResourceId) {
this.nameResourceId = nameResourceId;
}
}
...
list[i] = getString(pet.nameResourceId);