Закрытие диалогового окна с предупреждением при нажатии кнопки - PullRequest
28 голосов
/ 19 апреля 2011

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

AlertDialog.Builder dialog = new AlertDialog.Builder(AddData.this);
DialogInterface dia = new DialogInterface();

//Create a custom layout for the dialog box
LayoutInflater inflater = (LayoutInflater)AddData.this.getSystemService(LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.add_rep_1_set, parent, false);

TextView title = (TextView)layout.findViewById(R.id.rep_1_title);
Button add_item = (Button)layout.findViewById(R.id.add_button);

add_item.setOnClickListener(new OnClickListener()
{
        @Override
        public void onClick(View v)
        {
        //Need this to close the alert dialog box
        }
});

title.setText(workout_items[position]);
dialog.setView(layout);
dialog.show();

Я не могу завершить вызов, потому что он закрывает представление списка, из которого запускается диалоговое окно предупреждения, и вызовы dialog.dismiss мне недоступны.Как вы думаете, я должен сделать, чтобы это исправить?

Ответы [ 9 ]

34 голосов
/ 19 апреля 2011
AlertDialog.Builder dialog = new AlertDialog.Builder(AddData.this);
DialogInterface dia = new DialogInterface();

//Create a custom layout for the dialog box
LayoutInflater inflater = (LayoutInflater)AddData.this.getSystemService(LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.add_rep_1_set, parent, false);

TextView title = (TextView)layout.findViewById(R.id.rep_1_title);
Button add_item = (Button)layout.findViewById(R.id.add_button);

title.setText(workout_items[position]);
dialog.setView(layout);

AlertDialog alertDialog = dialog.create();

add_item.setOnClickListener(new OnClickListener()
{
    @Override
    public void onClick(View v)
    {
        alertDialog.dismiss();
    }
});


alertDialog.show();
16 голосов
/ 19 апреля 2011

сделай так,

add_item.setOnClickListener(new OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                        dialog.dismiss();
                }
            });
12 голосов
/ 05 июля 2014

Попробуйте это:

    AlertDialog.Builder builder = new AlertDialog.Builder(this);

    LayoutInflater inflater = getLayoutInflater();
    View dialogView = inflater.inflate(R.layout.brush_opts_dialog,null);

    builder.setView(dialogView);


    closeBtn = (Button)dialogView.findViewById(R.id.close_btn);


   final AlertDialog dialog = builder.create();

    closeBtn .setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            dialog.dismiss();
        }
    });

    dialog.show();

Вы должны использовать AlertDialog.Builder, чтобы "построить" сам диалог предупреждений.Затем вызовите метод create () для объекта AlertDialog.Builder.Этот метод возвращает объект AlertDialog, который позволяет вам вызывать dismiss ().

Вам не нужно создавать его несколько раз или использовать какие-либо объекты DialogInterface.Это работает для меня.Дайте мне знать, как у вас дела.

3 голосов
/ 25 февраля 2013

Я изменил ваш код, пожалуйста, проверьте ..

   AlertDialog.Builder dialog = new AlertDialog.Builder(AddData.this);
    DialogInterface dia = new DialogInterface();

    //Create a custom layout for the dialog box
    LayoutInflater inflater = (LayoutInflater)AddData.this.getSystemService(LAYOUT_INFLATER_SERVICE);
    View layout = inflater.inflate(R.layout.add_rep_1_set, parent, false);

    TextView title = (TextView)layout.findViewById(R.id.rep_1_title);
    Button add_item = (Button)layout.findViewById(R.id.add_button);



    final AlertDialog Dial = alertDialog.create();
    title.setText(workout_items[position]);
    Dial.setView(layout);

    AlertDialog alertDialog = dialog.create();

    add_item.setOnClickListener(new OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            Dial.dismiss();
        }
    });


    Dial.show();

Только что добавлено

final AlertDialog Dial = alertDialog.Создайте();и измените dialog.setView (макет); на Dial.setView (макет);

теперь просто вызовите Dial.dismiss (); в слушателе onclick .. у меня отлично работает.

1 голос
/ 12 января 2018

используйте этот код в своем классе:

Dialog dialog = new Dialog(context);
dialog.setContentView(R.layout.custom);
((Button) dialog.findViewById(R.id.button))
   .setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        dialog.dismiss();
    }
});
dialog.show();

и создайте файл custom.xml, затем вставьте в него этот код:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=" Ok "/>
</RelativeLayout>

источник: https://www.mkyong.com/android/android-custom-dialog-example/

и если вам не нравится вышеуказанный код, см. Ссылку ниже: http://thedeveloperworldisyours.com/android/prevent-alertdialog-closing-button-clicked/

0 голосов
/ 01 июля 2019

Вы получаете ошибку, попробуйте этот код

   dialog.setView(layout);

   final AlertDialog alertDialog = dialog.create();

   add_item.setOnClickListener(new OnClickListener(){
    @Override
     public void onClick(View v)
        {
          if (alertDialog != null && alertDialog.isShowing()) {
              alertDialog.dismiss();
        }
      }
    });
   alertDialog.show();
0 голосов
/ 07 апреля 2019

Попробуйте это:

btn_go_anyway.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v)
    {
        getDialog().dismiss();
    }
});
0 голосов
/ 22 июня 2017

Вам необходимо реализовать DialogInterface.OnClickListener, а не View.OnClickListener.тогда будет доступен dialog.dismiss ().

new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int which){
       dialog.dismiss();
}
}
0 голосов
/ 19 апреля 2011

Попробуйте dialog.cancel (); в вашем слушателе onclick. Это должно работать.

...