我在包含if-else if-else块的for循环中看到奇怪的行为。
如果我执行以下操作,它将按预期工作,但列表中不存在的名称除外:
Resources res = context.getResources();
String[] debtnameslist = res.getStringArray(R.array.debtnames);
for(int i=1; i < debtnameslist.length; i++){
if (debtname.toLowerCase().contains(debtnameslist[i]))
{
int resID = context.getResources().getIdentifier("ic_dialog_"+debtnameslist[i], "drawable", "com.freshsoft.android.debtdestroyer");
icon.setImageResource(resID);
}
else if ((debtname.toLowerCase().contains("best") && (debtname.toLowerCase().contains("buy"))))
{
icon.setImageResource(R.drawable.ic_dialog_bestbuy);
}
// else {
// icon.setImageResource(R.drawable.ic_dialog_dollar);
// }
}
给了我这个: http://i54.tinypic.com/rsr33q.png
它起作用,除了应该显示通用符号的“测试”。如果我取消对// else部分的评论,我会得到以下内容:
http://i54.tinypic.com/25kj6z6.png
我的xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="debtnames">
<item >chase</item>
<item >discover</item>
<item >citibank</item>
<item >amazon</item>
<item >american express</item>
<item >diners</item>
<item >mastercard</item>
<item >visa</item>
<item >paypal</item>
<item >macys</item>
<item >bmw</item>
<item >target</item>
</string-array>
</resources>
答案 0 :(得分:0)
问题是 - 如果debtnameslist[i]
不包含debtnames
中的任何名称,也不包含“最佳购买”,则会显示美元图标 - 因为第一个if
为假,第二个也是假的。
您不能在其中放置非条件else
子句,因为它会覆盖下一循环中的图标!
正如你所看到的,在这种情况下唯一有效的是“目标” - 因为它是最后一个,没有下一个循环来覆盖它的图标。
答案 1 :(得分:0)
用螺丝拧了一会儿后想出来。诀窍是如果找到匹配就打破循环:
for (String name : debtnameslist) {
boolean matches = debtname.toLowerCase().contains(name);
if (matches)
{
int resID = context.getResources().getIdentifier("ic_dialog_"+name, "drawable", "com.freshsoft.android.debtdestroyer");
icon.setImageResource(resID);
break;
} else {
icon.setImageResource(R.drawable.ic_dialog_dollar);
}
}