我理解如何在资源文件String.xml中初始化String Array中的微调器。但是我的问题始终是如何从下拉菜单中选择一些东西时正确链接。例如,假设您的字符串数组看起来像那样
电力 加油站 其他
所以在onItemSelected监听器中,如果我想知道点击了什么以采取某个动作,那么我应该检查pos并对其采取行动(鉴于我知道我的字符串数组中的位置如下所示
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
switch(pos){
case 1: // Electricity
break;
case 2: //Gas
break;
.
.
.
}
}
或者我应该像Sting那样进行比较:
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
if(parent.getSelectedItemAtPos(pos).toString().equal("Electricity"){
} else if (......){
}
.
.
}
首先的优点是它更干净,但我必须确保当我更改资源文件时,我将始终跟踪更新索引的问题。 第二个是更安全但似乎是“罗嗦”做字符串比较。
我不是,也许我错过了一个最佳解决方案,或者我上面提出的建议只是好吗?
请帮助专家,我宁愿第一次做正确的事,因为我的应用程序中会有很多微调器:(
由于
答案 0 :(得分:1)
我认为这两种方法都很好。这取决于你需要选择哪一种方法
正如您所说,即使cases
但是在第二种方法中,如果只有1-2个条件来检查它,随着条件的增加它们看起来很好,它们的代码可能看起来很混乱
如果您关心可读性,请选择第一种方法,否则您可以根据需要选择
答案 1 :(得分:1)
第二个很好,但有点增强。声明一个本地字符串变量并存储所选的Spinner
项。
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
String selectedItem = parent.getSelectedItemAtPos(pos).toString();
if(selectedItem.equals("Electricity")) {
} else if (selectedItem.equals("Dummy")){
// ....
}
}
答案 2 :(得分:1)
在这两者之间,毫无疑问是第一种选择。首先,它是一个switch语句,所以它是一个瞬间跳转到右手柄,而第二个你有一个线性的比较线,直到你达到你想要的。其次,你在第二个中使用字符串比较,这比仅进行整数比较更慢且更不安全。如果你计划改变很多,这是一个更多的工作,但我认为这是两个更好的方式,个人。
答案 3 :(得分:1)
如果您通过资源文件在微调器中设置条目,那么在资源文件中声明字符串时,第一种方法会更好,因为您将知道哪个字符串在哪个索引中。
机器人:项=“@阵列/..."
但是如果您使用适配器来设置条目(您从服务器或其他任何地方接收的条目),那么最好采用第二种方法。在这种情况下,字符串的索引将是不确定的。
mSpinner.setAdapter(...)