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,没关系,它仍然可以工作……您不必更改代码的这一部分……也许您应该添加自己的代码。我会把它贴上去的。