Приветсвую, есть у меня в коде класс ConfirmDialog, цель которого при нажатии кнопки Продолжить, выполнить действие, а при нажатии отмена, убрать диалог.
Вот код
/*
* Created by k1ceargy on 30.11.18 (macOS 10.12)
* */
public class ConfirmDialog {
static Dialog dialog;
public static void showDialog(final Context context, String msg, View.OnTouchListener onTouchListener) {
dialog = new Dialog(context);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setCancelable(false);
dialog.setContentView(R.layout.activity_dialog);
TextView text = (TextView) dialog.findViewById(R.id.text_dialog);
final Button dialogButton = (Button) dialog.findViewById(R.id.btn_continue);
final Button cancelButton = (Button) dialog.findViewById(R.id.cancel_button);
text.setText(msg);
dialogButton.setOnTouchListener(onTouchListener);
cancelButton.setVisibility(View.VISIBLE);
cancelButton.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
v.getBackground().setColorFilter(context.getResources().getColor(R.color.dark_yellow), PorterDuff.Mode.SRC_ATOP);
v.invalidate();
break;
case MotionEvent.ACTION_UP:
v.getBackground().clearColorFilter();
v.invalidate();
dialog.dismiss();
break;
}
return false;
}
});
dialog.show();
}
}
работает это так:
ConfirmDialog.showDialog(this, "Вы действительно хотите что-то сделать?", (сюда передается OnTouchListener на кнопку Продолжить (dialogButton)));
Так вот, у меня есть CheckBox в другом классе, и чтобы вставить в него галочку необходимо запросить подтверждение, ну а если нажата кнопка отмены необходимо вернуть исходное значение CheckBox. Вопрос в том, как это сделать, если на кнопку отмены не повлиять.
Если вешать 2 TouchListener то это уже хардкод. Поэтому и название такое.
вы что то много всего напутали. В Диалоге должно быть всего 2 кнопки (в вашем случае) ОК и ОТМЕНА, в случае отмены я так понимаю вам вообще делать ничего не нужно, оставляйте CheckBox в том состоянии в котором он есть.
Почитайте что такое делегаты и как с ними работать
в данном примере:
Создайте интерфейс например IConfrimDialog
interface IConfrimDialog {
void onDialogConfirmClick();
void onDialogCancelClick();
}
в метод showDialog вместо OnTouchListener передавайте ваш IConfrimDialog. Методы IConfrimDialog вызывайте в OnTouchListener (который создавайте в методе showDialog)
Реализуйте (создавайте) анонимный класс IConfrimDialog, там где сейчас создаёте OnTouchListener
profit
ну и еще, если вам нужно только менять CheckBox то почему бы его и не передать в ваш showDialog
Я бы предложил убрать листенер и сделать так чтобы метод возвращал значение (boolean
или кастомный енум).
public static DialogResult showDialog(final Context context, String msg)
enum DialogResult { OK, CANCEL }
Использовать так:
DialogResult r = showDialog(context, "");
if(r == DialogResult.OK) {
// тут код для случая если пользователь нажал OK
} else {
// а тут если нажал Cancel
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
При выполнении appendChild появляется следующая ошибка
Сделал расширение, при клике на его иконку всплывает pop-up с кнопкой при нажатии на которую, открываются все ссылки на странице с определенным...
Запускаем Selenium-сервер (elgalu/docker-selenium):