我有一个int int minion1Hp
,其值可以是0 - > 20.根据值,使用ImageView
为bar1.setImageResource(R.drawable.hpa);
设置特定图像资源。但是,我的代码目前看起来像这样:
if (minion1Hp == 0) {
bar1.setImageResource(R.drawable.hp);
}
if (minion1Hp == 1) {
bar1.setImageResource(R.drawable.hpa);
}
if (minion1Hp == 2) {
bar1.setImageResource(R.drawable.hpb);
}
if (minion1Hp == 3) {
bar1.setImageResource(R.drawable.hpc);
}
if (minion1Hp == 4) {
bar1.setImageResource(R.drawable.hpd);
}
if (minion1Hp == 5) {
bar1.setImageResource(R.drawable.hpe);
}
......等等。有没有更有效的方法来实现这一点,而不是一长串if
语句?
答案 0 :(得分:4)
建议:在启动时初始化地图(例如在onCreate()
中)。像这样:
mDrawables = new HashMap<Integer, Integer>();
mDrawables.put(0, R.drawable.hp);
mDrawables.put(1, R.drawable.hpa);
...
然后就这样做:
bar1.setImageResource(mDrawables.get(minion1Hp));
答案 1 :(得分:1)
您可以为每个实例使用switch
语句和单独的case
。另外,您不应该只使用if
语句,代码运行缓慢,您应该使用else if
使其运行得更快(因为您的hp
可以永远不会同时成为1和2。
转换语句的例外:
switch (minion1Hp){
case 1:
bar1.setImageResource(R.drawable.hp);
break;
case 2:
bar1.setImageResource(R.drawable.hpa);
break;
等
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html
答案 2 :(得分:0)
此处的改进是将第一个if
后的else if
更改为minion1Hp
,因为switch-case
不能同时为多个值,但您可能会发现1}}块中的整个事件稍微整齐一些。