Android SwitchCase внутри onListItemClick - PullRequest
1 голос
/ 26 декабря 2010

Я пытаюсь использовать коммутатор.Но он говорит, что я не могу передать строку: (

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 ]

4 голосов
/ 26 декабря 2010

Выражение-переключатель должно иметь тип char, byte, short или int. Все дела ярлыки должны быть постоянными выражения - выражения должны содержать только литералы или именованные константы, инициализированные с константой выражения - и должны быть назначены тип выражения switch.

Это то, что есть! Java не позволяет вам передавать String для проверки состояния коммутатора, фактически новое предложение, возможно, было отклонено. (где-то читайте в блоге, извините, у меня нет источника)

Но это не значит, что вы не можете сделать это другим способом.

Альтернативы

1) Использовать позицию элемента списка, а не строку.

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;
}
2 голосов
/ 26 декабря 2010

Да, в Java оператор switch case принимает только целые значения.Вместо этого используйте if else.

...