处理String数组和Spinner的正确方法

时间:2013-01-29 04:52:16

标签: android

我理解如何在资源文件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 (......){
            }
            .
        .
    }

首先的优点是它更干净,但我必须确保当我更改资源文件时,我将始终跟踪更新索引的问题。 第二个是更安全但似乎是“罗嗦”做字符串比较。

我不是,也许我错过了一个最佳解决方案,或者我上面提出的建议只是好吗?

请帮助专家,我宁愿第一次做正确的事,因为我的应用程序中会有很多微调器:(

由于

4 个答案:

答案 0 :(得分:1)

我认为这两种方法都很好。这取决于你需要选择哪一种方法

正如您所说,即使cases

的数量有所增加,第一个提供了更多的可读性

但是在第二种方法中,如果只有1-2个条件来检查它,随着条件的增加它们看起来很好,它们的代码可能看起来很混乱

如果您关心可读性,请选择第一种方法,否则您可以根据需要选择

注意:如果我们要比较两种方法的效果,我认为它们之间没有太大区别(请参阅以下链接{link1link2})< / p>

答案 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(...)