зачем дважды щелкать вне действия alerttdialog, чтобы закрыть его? - PullRequest
0 голосов
/ 06 мая 2019

Я использую упражнение с темой диалога, в которой я не ставлю ни положительные, ни отрицательные кнопки.Эта активность запускается при получении внешних уведомлений (Firebase).Когда я собираюсь закрыть диалоговое окно, для закрытия требуется два нажатия вне диалогового окна.Действительно:

  • при первом нажатии диалоговое окно закрывается, но экран остается покрыт каким-то затенением пленки / глазури (это должна быть та же самая «тень», которая появляется, когда диалоговое окно открыто);
  • при втором нажатии этот вид тени исчезает, поэтому я возвращаюсь к моему исходному графическому интерфейсу.

Что можно сделать, чтобы не нажимать дважды, отклоняя действия диалога одним нажатием?Есть ли способ избежать создания этой тени, покрывающей мой GUI, когда создается диалоговое действие?

Я думаю, что моя проблема отличается от той, что здесь: AlertDialog не закрывает, дважды нажимаетзакрыть .В этом последнем посте отмечается, что методы setPositiveButton () и setNegativeButton () имеют неявный вызов закрытия диалога, это не то, что я пытаюсь выяснить.Я просто получаю уведомление, это уведомление превращается в действие с темой диалога, и чтобы закрыть его, мне нужно два нажатия, в то время как я хотел бы иметь только одно нажатие, чтобы закрыть его.Это моя активность:

public class NotificationDialogActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Intent intent = getIntent();
        showDialog(this, intent);
    }

    private void showDialog(Context context, @NonNull Intent intent) {
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setTitle(intent.getStringExtra("title"));
        builder.setMessage(intent.getStringExtra("text"));
        builder.create().show();
    }
}

Ответы [ 3 ]

1 голос
/ 06 мая 2019

Я думаю, что проблема может заключаться в том, что вы запускаете действие, а затем запускаете диалог из этого действия. (?) Вы можете добавить OnCancelListener и завершить упражнение там. (?)

private void showDialog(Context context, @NonNull Intent intent) {
    AlertDialog.Builder builder = new AlertDialog.Builder(context);
    builder.setTitle(intent.getStringExtra("title"));
    builder.setMessage(intent.getStringExtra("text"));
    builder.setOnCancelListener(new DialogInterface.OnCancelListener() {
        @Override
        public void onCancel(DialogInterface dialog) {
            NotificationDialogActivity.this.finish();
        }
    });
    builder.show();
}

Кроме того, если вам не нужно это действие по какой-либо другой причине, вы можете полностью избавиться от него и просто переместить код showDialog в вызывающее действие, а затем сделать это вместо этого.

0 голосов
/ 06 мая 2019
  builder.setCancelable(true);
  //Use above line to dismiss a dialog of "AlertDialog.Builder"
  //if you touch outside...
  // It Works..

  //If you use "AlertDialog" then use below line 
  //to dissmiss on touching the outside...
  builder.setCanceledOnTouchOutside(true);
0 голосов
/ 06 мая 2019

Пожалуйста, посмотрите на этот ответ. Вы можете исправить эту проблему с этим!

Закрыть диалоговое окно щелчком мыши за пределами диалогового окна

...