web-dev-qa-db-ja.com

ボタンのクリック時にカスタムアラートダイアログを閉じる

アラートダイアログを閉じることができません。ダイアログを作成するためにレイアウトインフレータを使用しているので、それを使い終わった後に物を閉じる方法についてはわかりません。コードは次のとおりです。

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

Finishを呼び出すことはできません。これにより、アラートダイアログが起動されるリストビューが閉じられ、dialog.dismiss呼び出しが利用できなくなります。

これを修正するにはどうすればいいと思いますか?

28
Eric
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();
35
Pasha

このようにします

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

これを試して:

    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を使用して、アラートダイアログ自体を「構築」する必要があります。次に、AlertDialog.Builderオブジェクトでcreate()メソッドを呼び出します。このメソッドは、alertDialogオブジェクトを返します。これにより、dismiss()を呼び出すことができます。

複数回作成する必要も、DialogInterfaceオブジェクトを使用する必要もありません。これは私のために動作します。それがあなたにどのように役立つか教えてください。

12
Nlinscott

コード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(layout);Dial.setView(layout);に変更します

onclickリスナーでDial.dismiss();を呼び出すだけです。

3
Abdus Salam

クラスでこのコードを使用します。

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/

1
سعید .م

View.OnClickListenerではなく、DialogInterface.OnClickListenerを実装する必要があります。次に、dialog.dismiss()が使用可能になります。

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

エラーが発生しました。このコードを試してください

   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
StrTOInt

Dialog.cancel()を試してください。 onclickリスナーで。動作するはずです。

0
Ungureanu Liviu