Androidアラートダイアログに3番目のボタンを追加するにはどうすればよいですか?


118

APIによると、アラートダイアログには1つ、2つ、または3つのボタンを含めることができますが、SDKでは正と負のボタンしか使用できません。次に、3番目のボタンを追加するにはどうすればよいですか?



完全な概要のための@Suragch有用な回答
FindOutIslamNow 2018年

回答:


136

このコードスニペットは、使用できる3つの異なるボタンの説明に役立ちます。

    alertDialog = new AlertDialog.Builder(this).create();

    alertDialog.setTitle("Dialog Button");

    alertDialog.setMessage("This is a three-button dialog!");

    alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "Button 1 Text", new DialogInterface.OnClickListener() {

      public void onClick(DialogInterface dialog, int id) {

        //...

    } }); 

    alertDialog.setButton(AlertDialog.BUTTON_NEGATIVE, "Button 2 Text", new DialogInterface.OnClickListener() {

      public void onClick(DialogInterface dialog, int id) {

        //...

    }}); 

    alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "Button 3 Text", new DialogInterface.OnClickListener() {

      public void onClick(DialogInterface dialog, int id) {

        //...

    }});

29
これは非推奨です...私の答えを見てください。
ninjasense

1
@ninjasense、私はあなたが答えを書いているときに気づき、編集していました。ありがとう!
sahhhm

225

ダイアログを作成するときに、次のようなものをビルダーに追加します。

builder = new AlertDialog.Builder(context);
builder.setTitle("Test");
builder.setIcon(R.drawable.icon);
builder.setMessage("test");
builder.setPositiveButton("Call Now",
        new DialogInterface.OnClickListener()
        {
            public void onClick(DialogInterface dialog, int id)
            {
                dialog.cancel();
            }
        });

builder.setNeutralButton("Setup",
        new DialogInterface.OnClickListener()
        {
            public void onClick(DialogInterface dialog, int id)
            {
                context.startActivity(new Intent(context, Setup.class));
                //dialog.cancel();
            }
        });

builder.setNegativeButton("Exit",
        new DialogInterface.OnClickListener()
        {
            public void onClick(DialogInterface dialog, int id)
            {
                dialog.cancel();
            }
        });
builder.create().show();

2
@ninjasense警告ダイアログに4番目のボタンを追加することは可能ですか?
オタク2013

4
この場合-いいえ。カスタムビューを作成する必要があります。
AndrewS 2013

カスタムアラートダイアログの作成はよりアクセシブルです。 stackoverflow.com/questions/13341560/...
EJ Chathuranga

50

xmlなしで任意の数のボタンを追加します

    AlertDialog.Builder builder = new AlertDialog.Builder(context);
    builder.setTitle("Title");
    builder.setItems(new CharSequence[]
            {"button 1", "button 2", "button 3", "button 4"},
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    // The 'which' argument contains the index position
                    // of the selected item
                    switch (which) {
                        case 0:
                            Toast.makeText(context, "clicked 1", 0).show();
                            break;
                        case 1:
                            Toast.makeText(context, "clicked 2", 0).show();
                            break;
                        case 2:
                            Toast.makeText(context, "clicked 3", 0).show();
                            break;
                        case 3:
                            Toast.makeText(context, "clicked 4", 0).show();
                            break;
                    }
                }
            });
    builder.create().show();

3
この解決策は、「OK」、「キャンセル」などのボタンを追加するのではなく、「オプション1」、「オプション2」などの選択肢のリストに表示する項目を設定することです。 「SDKは正と負のボタンのみを許可する」という質問に言及していますが、これはその制限を克服する方法には答えていません。
d60402 2015年

3
@ d60402-あなたは良い点を持っていますが、2つ以上のボタンを持つダイアログを作成する方法を探している開発者がこの答えに出くわした場合...このオプションは、ボタンの数に対してより柔軟であるため、非常に便利です。別の言い方をすれば、正のボタンと負のボタンでは十分ではない場合、3つのボタンがすぐに4つのボタンになる可能性があります。したがって、投票。
Oded Breiner 2015年

@ d60402質問のタイトルは、3番目のボタンを追加する方法であり、ニュートラルボタンを表示する方法ではありません。
ボリストロイホフ2015

@Boris Treukhov-ダイアログに正のボタンと負のボタンがある場合、それはダイアログに2つのボタンがあることを意味します。ニュートラルボタンを追加すると、ダイアログに3番目のボタンが表示されます。これは基本的に、この質問に対する上位2つの回答が行っていることです。
d60402

stackoverflow.com/a/19658646/2914140に示されているように、このソリューションでは、ダイアログメッセージが設定されていない場合にボタンが表示されます。
CoolMind 2016

5
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
                    this);

            // set title
            alertDialogBuilder.setTitle("To Do List");

            // set dialog message
            alertDialogBuilder
                    .setMessage("What do you want?")
                    .setCancelable(false)
                    .setPositiveButton("Delete All", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            // if this button is clicked, close
                            // current activity




                            dialog.cancel();


                        }
                    }).setNeutralButton("Delete", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    // if this button is clicked, close
                    // current activity




                    dialog.cancel();

                }
            })
                    .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            // if this button is clicked, just close
                            // the dialog box and do nothing

                            dialog.cancel();
                        }
                    });

            // create alert dialog
            AlertDialog alertDialog = alertDialogBuilder.create();

            // show it
            alertDialog.show();

1
これと上位2つの回答の違いは何ですか?
FindOutIslamNow 2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.