【问题标题】:Android SwitchCase inside onListItemClickonListItemClick 内的 Android SwitchCase
【发布时间】:2010-12-26 11:17:14
【问题描述】:

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

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

【问题讨论】:

    标签: android listview switch-statement


    【解决方案1】:

    switch 表达式必须是类型 char、byte、short 或 int。所有案例 标签必须是常量 表达式——表达式必须 仅包含文字或命名 用常量初始化的常量 表达式——并且必须可以赋值给 switch 表达式的类型。

    就是这样! Java 不允许您为 switch case 语句传递字符串,事实上,新提案可能被拒绝。 (在某处的博客中阅读,对不起,没有来源)

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

    替代品

    1) 使用列表项的位置,而不是字符串。

    2) 使用Enum

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

    编辑:就个人而言,我会添加 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,你的菜单项是不变的吗?如果是这样,那么switch(position)Compose=0,Inbox=1,Drafts=2,Sent=3 需要我详细说明吗?
    • @st0le 是的,它们是从数组中填充的。它们是固定的。我还在学习:)
    • 但我使用数组来填充列表视图:(
    • @Harsha,没关系,它仍然可以工作....您不必更改那部分代码...也许您应该添加自己的代码。我会按要求发布。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-29
      • 2018-12-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多