Здравствуйте, я новичок в java, не могли бы вы мне помочь можно ли из этого кода сделать метод и потом вызывать его, а так он очень уж громоздкий, и как это сделать? Тут я создаю диалог со списком и обрабатываю нажатие на элемент диалога.
@Override
protected Dialog onCreateDialog(int id) {
switch (id){
case KEY:
AlertDialog.Builder b = new AlertDialog.Builder(Stop1.this);
b.setTitle("Пересадка");
b.setPositiveButton("Отмена", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
b.setItems(city, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int position) {
switch(position) {
case 0:
startActivity(new Intent(Stop1.this, number_11.class));
break;
}
}
});
return b.create();
default:
return null;
}
}
Рекомендуемая литература: Роберт Мартин. Чистый код: создание, анализ и рефакторинг. Библиотека программиста. - СПб.: Питер, 2010. - 464 с.: ил.
Как вам правильно уже указали в комментарии - ваш код уже является методом, который можно вызвать, его нужно отрефакторить.
Например, это может выглядеть так (простите за возможные неточности по синтаксису, мой "родной" язык C#):
1 Возможно нужно вообще избавиться от корневого switch
и заменить его на if
, но так как я вижу, что там используется именованная константа, пока воздержусь от такого рефакторинга, т. к. возможно в дальнейшем будут добавлены еще ветки.
2 Избавляемся от вложенности (хорошие имена для методов вы должны будете придумать самостоятельно, т. к. мне неизвестен весь контекст):
@Override
protected Dialog onCreateDialog(int id) {
switch (id){
case KEY:
return createKeyDialog();
default:
return null;
}
}
private Dialog createKeyDialog() {
AlertDialog.Builder b = new AlertDialog.Builder(Stop1.this);
b.setTitle("Пересадка");
b.setPositiveButton("Отмена", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
b.setItems(city, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int position) {
switch(position) {
case 0:
startActivity(new Intent(Stop1.this, number_11.class));
break;
}
}
});
return b.create();
}
3 Избавляемся от вложенности:
private Dialog createKeyDialog() {
AlertDialog.Builder b = new AlertDialog.Builder(Stop1.this);
b.setTitle("Пересадка");
b.setPositiveButton("Отмена", createPositiveListener());
b.setItems(city, createItemsListener());
return b.create();
}
private ... createPositiveListener() {
return new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
}
}
private ... createItemsListener() {
return new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int position) {
switch(position) {
case 0:
startActivity(new Intent(Stop1.this, number_11.class));
break;
}
}
}
}
И так далее.
4 Избавляемся от магических констант:
Здесь нужно как-то именовать такие константы, как: "Пересадка"
, "Отмена"
- это позволит в дальнейшем их отредактировать в одном месте, а также при возможной локализации на другие языки.
5 Улучшаем читаемость имен:
Бросается в глаза непонятное Stop1
, также рекомендую привести к единому стилю (camelCase) имя: number_11
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
У меня задача распарсить форум, я открываю соединение:
Есть приложение с googlemapApiВсе окей но хочу чтоб карта была оффлайн чтоб не подргружалась
Добрый деньВ прикрепленном рисунке слева скрин запущенного приложение в Intellij Idea, справа - предпросмотр в Scene Builder