Como faço para acionar um evento quando clique ocorre fora de um diálogo
-
14-11-2019 - |
Pergunta
Eu gostaria de saber como resolver um problema que eu tenho.
Eu tenho uma caixa de Diálogo que aparece em uma atividade.O Diálogo não tampa toda a tela, de modo que os botões da atividade ainda mostrar.Eu posso facilmente fechar a caixa de diálogo quando há um toque fora da caixa de diálogo limites com dialog.setCanceledOnTouchOutside(true);
No entanto o que eu quero fazer é disparar um evento se um clique fora da caixa de Diálogo limites e.g se alguém toca um botão na barra principal Atividade, ele deve fechar a caixa de Diálogo e fogo que o evento ao mesmo tempo).
Solução
Ele Trabalha Para mim,,
Window window = dialog.getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
dialog.show();
Outras dicas
Quando dialog.setCanceledOnTouchOutside(true);
depois é só substituir onCancel()
como esta:
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.
}
}
);
Digite o seu código dentro do onCancel()
método assim que funciona quando a caixa de diálogo fica cancelada.
Se você estiver dentro de diálogo personalizada de classe, e gostaria de pegar um clique fora do evento - substituir cancelar().Se você quiser pegar 'diálogo fechado" evento - substituir exonerar().Eu recomendo a inserção de lógica ANTES da super.fechar().Kotlin exemplo:
override fun dismiss() {
Utils.hideKeyboard(mContext, window)
super.dismiss()
}
Você pode usar um OnCancelListener para disparar um evento quando um clique ocorre fora de uma caixa de diálogo:
dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
yourFunction();
}
});
No DialogFragment
você pode usar AlertDialog
e a resposta de @silverTech:
override fun onDismiss(dialog: DialogInterface) {
yourMethod()
super.onDismiss(dialog)
}
ou
override fun onCancel(dialog: DialogInterface) {
super.onCancel(dialog)
yourMethod()
}