Android SwitchCase内部onListItemClick

Android SwitchCase内部onListItemClick,android,listview,switch-statement,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);

我正在试着用开关箱。但上面说我不能传递字符串:

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
是的,在Java开关情况下,运算符只接受整数值。请改用if-else。

是,在Java开关情况下,运算符只接受整数值。用if-else代替

开关表达式的类型必须为 char、byte、short或int.所有大小写 标签必须是常量 表达式表达式必须 仅包含文字或命名字符 常量初始化为常量 表达式和必须可分配给 开关表达式的类型

就是这样!Java不允许您为switch case语句传递字符串,事实上,新的提议可能被拒绝了。在某个地方的博客上读到,对不起,没有来源

但这并不意味着你不能用另一种方法

替代品

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

2使用

3将其存储在地图甚至数组中,并在开关盒中使用该值

编辑:就我个人而言,我会添加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;
}
开关表达式的类型必须为 char、byte、short或int.所有大小写 标签必须是常量 表达式表达式必须 仅包含文字或命名字符 常量初始化为常量 表达式和必须可分配给 开关表达式的类型

就是这样!Java不允许您为switch case语句传递字符串,事实上,新的提议可能被拒绝了。在某个地方的博客上读到,对不起,没有来源

但这并不意味着你不能用另一种方法

替代品

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

2使用

3将其存储在地图甚至数组中,并在开关盒中使用该值

编辑:就我个人而言,我会添加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;
}

你能给我举个例子,说明如何使用列表项的位置来实现这一点吗?@Harsha,你的菜单项是常量吗?如果是这样,那么switchposition and Compose=0、Inbox=1、Drafts=2、Sent=3您想让我详细说明一下吗?@st0le是的,它们是从数组填充的。它们是固定的。我仍在学习:但我正在使用数组填充列表视图:@Harsha,没关系,它仍然可以工作……您不必更改代码的这一部分……也许您应该添加自己的代码。我会相应地发布它。你能给我一个例子,说明如何使用列表项的位置来执行此操作吗?@Harsha,你的菜单项是恒定的吗?如果是这样,那么switchposition and Compose=0、Inbox=1、Drafts=2、Sent=3您想让我详细说明一下吗?@st0le是的,它们是从数组填充的。它们是固定的。我仍在学习:但我正在使用数组填充列表视图:@Harsha,没关系,它仍然可以工作……您不必更改代码的这一部分……也许您应该添加自己的代码。我会把它贴上去的。