Android: AlertDialog не закрывается ни в Cancel (), ни в Dismiss () - PullRequest
0 голосов
/ 30 июня 2018

Я реализовал AlertDialog, который работает как диалог сообщений. Когда пользователь набирает сообщения, он может нажать кнопку «ОТПРАВИТЬ» или кнопку «ОТМЕНА». Кнопка «ОТПРАВИТЬ» работает нормально, но кнопка отмены по какой-то причине не работает.

findViewById(R.id.contactfab).setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View view)
            {
                final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(Frontpage.this);
                final AlertDialog dialog = dialogBuilder.create();
                LayoutInflater inflater = Frontpage.this.getLayoutInflater();
                View dialogView = inflater.inflate(R.layout.dialog_contact, null);
                dialogBuilder.setView(dialogView);

                final EditText editText = (EditText) dialogView.findViewById(R.id.contactText);
                editText.setText("");
                dialogView.findViewById(R.id.send_button).setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        String [] reciever = new String[]{"test@hotmail.com"};
                        String subject = ("Feedback");
                        Intent mailIntent = new Intent(Intent.ACTION_SEND);
                        mailIntent.putExtra(Intent.EXTRA_EMAIL, reciever);
                        mailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
                        mailIntent.putExtra(Intent.EXTRA_TEXT, editText.getText().toString());
                        mailIntent.setType("message/rfc822");
                        startActivity(Intent.createChooser(mailIntent, "Vælg en applikation til at sende din mail med"));
                    }
                });

                dialogView.findViewById(R.id.cancel_button).setOnClickListener(new View.OnClickListener()
                {
                    @Override
                    public void onClick(View view)
                    {
                        dialog.cancel();
                    }
                });

                dialogBuilder.show();
            }
        });

Чтобы проверить, слушает ли он кнопку отмены, я пытался заставить ее печатать строку при каждом нажатии кнопки. Строка печатается, но диалог не закрывается. Пробовал как с dialog.dismiss(), так и с dialog.dismiss()

Что мне не хватает?

1 Ответ

0 голосов
/ 30 июня 2018

Когда вы вызываете dialogBuilder.show();, он создаст новый AlertDialog с аргументами, предоставленными сборщику, и сразу же отобразит диалоговое окно. В результате этот новый AlertDialog будет отличаться от того, который объявлен с использованием final AlertDialog dialog. Короче говоря, с вашим кодом dialog объявленный никогда не будет отображаться и, следовательно, dialog.cancel() или dialog.close() не окажет никакого влияния.

Измените ваш код следующим образом:

findViewById(R.id.contactfab).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view){
            final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(Frontpage.this);

            LayoutInflater inflater = Frontpage.this.getLayoutInflater();
            View dialogView = inflater.inflate(R.layout.dialog_contact, null);
            dialogBuilder.setView(dialogView);
            final EditText editText = (EditText) dialogView.findViewById(R.id.contactText);
            editText.setText("");
            final AlertDialog dialog = dialogBuilder.create();
            dialogView.findViewById(R.id.send_button).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    String [] reciever = new String[]{"test@hotmail.com"};
                    String subject = ("Feedback");
                    Intent mailIntent = new Intent(Intent.ACTION_SEND);
                    mailIntent.putExtra(Intent.EXTRA_EMAIL, reciever);
                    mailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
                    mailIntent.putExtra(Intent.EXTRA_TEXT, editText.getText().toString());
                    mailIntent.setType("message/rfc822");
                    startActivity(Intent.createChooser(mailIntent, "Vælg en applikation til at sende din mail med"));
                }
            });

            dialogView.findViewById(R.id.cancel_button).setOnClickListener(new View.OnClickListener()
            {
                @Override
                public void onClick(View view) {
                    dialog.cancel();
                }
            });

            dialog.show();
        }
    });
}
...