Использование строк в корпусе коммутатора для меню?

Я делаю приложение для форума в настоящее время, и я добавляю раздел избранных, где вы можете добавить свои любимые разделы для быстрого доступа. У меня есть меню, в котором есть список различных разделов, так что я сделал, чтобы сделать случай переключения, чтобы решить, что делать, когда нажимается определенный пункт меню, в этом случае раздел. Посредством этого я узнал, что вы не можете использовать строки с корпусом коммутатора, поэтому мой вопрос заключается в том, как я могу определить, какая кнопка была нажата, и выполнить действие, согласно которому он был нажат?

Это мой код для меню:

public class Menu extends ListActivity{ String[] classes = {"Home", "Gaming", "Microsoft Consoles", "Sony Consoles", "Other Platforms", "Tech Center", "General"}; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setListAdapter(new ArrayAdapter<String>(Menu.this, android.R.layout.simple_list_item_1, classes)); } @Override protected void onListItemClick(ListView l, View v, int position, long id) { // TODO Auto-generated method stub super.onListItemClick(l, v, position, id); switch (classes) { case "Home": break; case "Gaming".hashCode(): break; } } } 

Я получаю сообщение об ошибке, потому что классы – это String [], и я не могу использовать это в случае с коммутатором, так есть ли способ сделать это или альтернативу?

Строки в операторах switch были добавлены в Java 7. Например, посмотрите здесь . Поскольку в настоящее время разработка Android не основана на синтаксисе Java 7, вам придется перейти на альтернативный маршрут. А это означает: выражения if-else. Они не самые красивые, но они справятся с этой задачей.

Вот хороший и чистый обходной путь:

 public enum Classes { HOME("Home"), GAMING("Gaming"), ... MICROSOFT_CONSOLES("Microsoft Consoles"); private final String name; Classes(String name) { this.name = name; } @Override public String toString() { return name; } } 

Вы можете переключить перечисление и использовать его таким образом в своем адаптере:

 new ArrayAdapter<String>(Menu.this, android.R.layout.simple_list_item_1, Classes.values()) 

Обновить

Единственная проблема заключается в том, что эти строки жестко закодированы. Чтобы обойти этот факт, я бы рекомендовал реализовать статический помощник контекста приложения и реализовать enum вроде этого (это идея, я этого не пробовал, но она должна работать):

 public enum Classes { HOME(R.string.home), GAMING(R.string.gaming), ... MICROSOFT_CONSOLES(R.string.microsoft_consoles); private final int name; Classes(int name) { this.name = name; } @Override public String toString() { return App.getContext().getString(name); } } 

Лучшее решение:

Один enum Класс:

 public enum Tabs { Home, Gaming, Microsoft_Consoles, Sony_Consoles, Other_Platforms, Tech_Center, General } 

В другом классе:

  switch (classes) { case Home: break; ... } 

@override класс toString () перечислений enum, чтобы сделать это хорошо.

Intereting Posts
Ошибка GLS: INVALID_AUDIENCE в конечных точках Google Ошибка с конечными точками в Android: GoogleAuthIOException Как остановить приложение от зомбирования после того, как я обработаю неперехваченное Excepition? Ошибка выполнения результата ResultInfo {who_null, request = 1, result = -1, data = Intent {(имеет дополнительные функции)}} для действия; NullPointerException Open-sourcing мобильное приложение Получить имя файла после того, как filereader асинхронно загрузил файл Как заставить ProgressBar прекратить вращение? Разрешение: INJECT_EVENTS для Instruenation для других приложений Android SQLite INSERT Android: Получите UsbDevice от намерения Android – доступ к папке приложений Google Диска с другого устройства, но такое же приложение Как заставить GridView загружать ячейки GridView с различной шириной столбца в строках Устранение утечки данных в веб-обозревателе Android WebView Retrofit2 Android: ожидается BEGIN_ARRAY, но BEGIN_OBJECT в строке 1 столбец 2 путь $