在onListItemClick里面的Android SwitchCase

时间:2010-12-26 11:17:14

标签: android listview switch-statement

我正在尝试使用开关盒。但它说我不能传递一个字符串:(

protected void onListItemClick(ListView l, View v, int position, long id) {

    // super.onListItemClick(l, v, position, id);

    String selection = l.getItemAtPosition(position).toString();

    Log.i("Harsha", selection);

    switch (selection) {
    case "Compose":

        break;
    case "Inbox":

        break;
    case "Drafts":

        break;
    case "Sent":

        break;
    default:
        break;
    }

}

错误是

Cannot switch on a value of type String. Only convertible int values or enum constants are permitted

2 个答案:

答案 0 :(得分:4)

  

switch表达式必须是type   char,byte,short或int。所有情况   标签必须是不变的   表达式 - 表达式必须   仅包含文字或命名   用常量初始化的常量   表达式 - 并且必须可分配给   切换表达式的类型。

它是什么! Java不允许您为switch case语句传递String,事实上,新Proposal可能被拒绝。 (在某个博客上阅读,对不起,没有来源)

但这并不意味着你不能通过另一种方法来做到这一点。

替代

1)使用listitem的位置,而不是字符串。

2)使用Enum

3)将其存储在Map<String,Integer>(甚至数组)中,并使用SWitch案例中的值

编辑:就个人而言,我会添加4个常量并按此方式执行

final int MENU_COMPOSE = 0; //should be equal to the index in your array.
final int MENU_INBOX = 1;
final int MENU_DRAFTS = 2;
final int MENU_SENT = 3;

switch (position) {
case MENU_COMPOSE: //Compose, add comments never the less.

    break;
case  MENU_INBOX: //Inbox

    break;
case  MENU_DRAFTS: //Drafts

    break;
case  MENU_SENT: //Sent

    break;
default:
    break;
}

答案 1 :(得分:2)

是的,在Java switch case中,运算符只接受整数值。请改用if else