Закрытие диалогового окна настраиваемого предупреждения при нажатии кнопки

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

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 недоступны мне.

Как вы думаете, что я должен сделать, чтобы исправить это?

Ответ 1

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();

Ответ 2

сделайте это так,

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

Ответ 3

Попробуйте следующее:

    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, который позволяет вам вызвать функцию увольнения().

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

Ответ 4

Я изменил ваш код PLZ проверить.

   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.create(); и изменение dialog.setView(компоновка);в Dial.setView(компоновка);

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

Ответ 5

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

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/

Ответ 6

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

Ответ 7

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

new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int which){
       dialog.dismiss();
}
}

Ответ 8

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

   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();

Ответ 9

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

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