ฉันจะเพิ่มปุ่มที่สามในกล่องโต้ตอบการแจ้งเตือนของ Android ได้อย่างไร


118

API ระบุว่ากล่องโต้ตอบการแจ้งเตือนสามารถมีปุ่มหนึ่งสองหรือสามปุ่ม แต่ SDK อนุญาตให้ใช้ปุ่มบวกและลบเท่านั้น ฉันจะเพิ่มปุ่มที่สามได้อย่างไร?



คำตอบที่เป็นประโยชน์ของ @Suragch สำหรับภาพรวมทั้งหมด
FindOutIslamNow

คำตอบ:


137

ข้อมูลโค้ดนี้จะช่วยอธิบายปุ่มต่างๆสามปุ่มที่คุณสามารถใช้ได้:

    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

226

เมื่อคุณสร้างกล่องโต้ตอบให้เพิ่มสิ่งนี้ลงในตัวสร้าง:

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 เพื่อแจ้งเตือนได้หรือไม่?
Geek

4
ในกรณีนี้ - ไม่ คุณควรสร้างมุมมองแบบกำหนดเอง
AndrewS

การสร้างกล่องโต้ตอบการแจ้งเตือนแบบกำหนดเองนั้นทำได้มากกว่า 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
วิธีแก้ปัญหานี้ไม่ใช่การเพิ่มปุ่มต่างๆเช่น "ตกลง" "ยกเลิก" เป็นต้น แต่เป็นการตั้งค่ารายการที่จะแสดงในรายการตัวเลือกเช่น "ตัวเลือกที่ 1" "ตัวเลือกที่ 2" เป็นต้นเนื่องจาก คำถามระบุว่า "SDK อนุญาตเฉพาะปุ่มบวกและลบเท่านั้น" ซึ่งไม่ได้ตอบโจทย์ว่าจะเอาชนะข้อ จำกัด ดังกล่าวได้อย่างไร
d60402

3
@ d60402 - คุณมีจุดดี แต่หากนักพัฒนาที่กำลังมองหาวิธีสร้างกล่องโต้ตอบที่มีปุ่มมากกว่า 2 ปุ่มจะเจอคำตอบนี้ ... การมีตัวเลือกนี้มีประโยชน์มากเพราะมีความยืดหยุ่นมากกว่าด้วยจำนวนปุ่ม หากต้องการวางให้แตกต่างกันหากปุ่มบวกและลบไม่เพียงพอสำหรับสิ่งที่คุณทำปุ่ม 3 ปุ่มอาจกลายเป็น 4 ปุ่มได้อย่างรวดเร็ว ดังนั้นการโหวต
Oded Breiner

@ d60402 หัวข้อคำถามคือวิธีเพิ่มปุ่มที่สามไม่ใช่วิธีแสดงปุ่มกลาง
Boris Treukhov

@Boris Treukhov - หากกล่องโต้ตอบมีปุ่มบวกและปุ่มลบแสดงว่ากล่องโต้ตอบมีปุ่มสองปุ่ม การเพิ่มปุ่มกลางจะทำให้กล่องโต้ตอบเป็นปุ่มที่สาม นี่คือสิ่งที่คำตอบสองอันดับแรกของคำถามนี้กำลังทำอยู่
d60402

ดังที่แสดงในstackoverflow.com/a/19658646/2914140โซลูชันนี้จะแสดงปุ่มต่างๆเมื่อไม่มีการตั้งค่าข้อความโต้ตอบ
CoolMind

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.