Подтвердить что ты не робот

Как мне запустить событие, когда щелчок происходит за пределами диалогового окна

Я хотел бы знать, как решить проблему, которую у меня есть.

У меня есть диалоговое окно, которое появляется в действии. Диалог не охватывает весь экран, поэтому кнопки из активности все еще отображаются. Я могу легко закрыть диалоговое окно, когда есть касание вне границ диалога с помощью dialog.setCanceledOnTouchOutside(true);

Однако то, что я хочу сделать, - это запустить событие, если клик находится за пределами границ диалогового окна (например, если кто-то касается кнопки основного действия, он должен закрыть диалоговое окно и одновременно запустить это событие).

4b9b3361

Ответ 2

Когда dialog.setCanceledOnTouchOutside(true);, вы просто переопределяете onCancel() следующим образом:

dialog.setOnCancelListener(
        new DialogInterface.OnCancelListener() {
            @Override
            public void onCancel(DialogInterface dialog) {
                //When you touch outside of dialog bounds, 
                //the dialog gets canceled and this method executes.
            }
        }
);

Введите код внутри метода onCancel(), чтобы он запускался при отмене диалога.

Ответ 3

Вы можете использовать OnCancelListener для запуска события, когда щелчок происходит вне диалогового окна:

dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
    @Override
    public void onCancel(DialogInterface dialog) {
        yourFunction();
    }
});

Ответ 4

Если вы находитесь в пользовательском диалоговом классе и хотите перехватить событие "click outside" - переопределите cancel(). Если вы хотите перехватить событие "диалог закрыт" - переопределите dismiss(). Вставьте логику ДО super.dismiss(). Пример Kotlin:

override fun dismiss() {
    Utils.hideKeyboard(mContext, window)
    super.dismiss()
}