Создаю диалоговое окно с множественным выбором. Подскажите, как правильно отменить изменения выбора после нажатия на кнопку Отмена или закрытия окна? Первое, что приходит в голову - записывать все изменения в массив, а потом подгружать их в зависимости от действий пользователя (нажатие на ок или отмену). Есть ли какой-то более удобный способ?
private void showEventParticipantsDialog()
{
String[] listItems = new String[] {"Музыкант", "Музыкальная группа", "Фотограф", "Видеограф", "Фокусник",
"Ведущий", "Шоу", "Диджей", "Звукорежиссёр", "Декоратор"};
AlertDialog.Builder checkBuilder = new AlertDialog.Builder(getActivity());
checkBuilder.setTitle("Выберите участников");
checkBuilder.setMultiChoiceItems(listItems, participantsArray, (dialogInterface, i, b) ->
participantsArray[i] = b);
checkBuilder.setPositiveButton("Ок", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i)
{
}
});
checkBuilder.setNegativeButton("Отмена", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i)
{
Log.d("SAHJASSA", "Cancel: ");
}
});
checkBuilder.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialogInterface)
{
Log.d("SAHJASSA", "onDismiss: ");
}
});
checkBuilder.create();
checkBuilder.show();
}
Можно не трогать массив при кликах по элементам, а применить всё разом при позитивном клике.
Соответственно никакие изменения не будут применены если диалог закрыли любым другим способом:
checkBuilder.setPositiveButton("Ок", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
SparseBooleanArray cip = ((AlertDialog) dialog).getListView().getCheckedItemPositions();
for (int i = 0; i < cip.size(); i++) {
int key = cip.keyAt(i);
participantsArray[key] = cip.get(key);
}
}
});
P.S. Чтобы диалог не изменял входной массив нужно передать null
вместо обработчика клика по элементу. Странно что это работает именно так, а не наоборот - но что имеем, то имеем:
checkBuilder.setMultiChoiceItems(listItems, participantsArray, null);
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Разбирал документацию Spring, нашёл там термин SPIЧто он означает и какое у него отличие от API? Очень желательно с примерами на Java
я делаю игру на java в виде 2д бродилки с видом сверху и также в моей игре есть робот надо запрограммировать робота так чтобы он обходил все преграды...
Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение