Làm cách nào để thêm nút thứ ba vào Hộp thoại Cảnh báo của Android?


118

API nói rằng Hộp thoại cảnh báo có thể có một, hai hoặc ba nút, nhưng SDK chỉ cho phép một nút tích cực và tiêu cực. Làm cách nào sau đó tôi có thể thêm nút thứ ba?



@Suragch câu trả lời hữu ích để có cái nhìn tổng quan đầy đủ
FindOutIslamNow

Câu trả lời:


136

Đoạn mã này sẽ giúp giải thích ba nút khác nhau mà bạn có thể sử dụng:

    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
Điều này không được chấp nhận ... hãy xem câu trả lời của tôi.
ninjasense

1
@ninjasense, tôi đã nhận ra và đang chỉnh sửa khi bạn viết câu trả lời của mình. Cảm ơn!
sahhhm

225

Khi bạn đang tạo hộp thoại, hãy thêm một cái gì đó như thế này vào trình tạo:

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 Có thể thêm nút thứ 4 vào hộp thoại cảnh báo không?
Geek

4
trong trường hợp này - không. Bạn nên thực hiện một chế độ xem tùy chỉnh.
AndrewS

Tạo hộp thoại cảnh báo tùy chỉnh chính xác hơn. stackoverflow.com/questions/13341560/…
EJ Chathuranga

50

Thêm bất kỳ số lượng nút nào mà không có 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
Giải pháp này không phải là thêm các nút, ví dụ: "OK", "Hủy", v.v., mà là thiết lập các mục được hiển thị trong danh sách lựa chọn, ví dụ: "Tùy chọn 1", "Tùy chọn 2", v.v. Vì câu hỏi đề cập rằng "SDK chỉ cho phép nút tích cực và nút phủ định", điều này không trả lời cách khắc phục hạn chế đó.
d60402

3
@ d60402 - bạn có một điểm tốt, nhưng nếu một nhà phát triển đang tìm cách tạo hộp thoại có nhiều hơn 2 nút thì bắt gặp câu trả lời này ... Có tùy chọn này rất hữu ích vì nó linh hoạt hơn với số lượng nút. Nói cách khác, nếu các nút tích cực và tiêu cực không đủ cho những gì bạn đang làm, 3 nút có thể trở thành 4 khá nhanh chóng. Do đó các phiếu bầu.
Oded Breiner

@ d60402 Tiêu đề của câu hỏi là cách thêm nút thứ ba, không phải cách hiển thị nút trung tính.
Boris Treukhov

@Boris Treukhov - Nếu hộp thoại có nút tích cực và nút tiêu cực, điều đó có nghĩa là hộp thoại có hai nút. Thêm nút trung tính sẽ cung cấp cho hộp thoại nút thứ ba. Về cơ bản đây là những gì hai câu trả lời hàng đầu cho câu hỏi này đang làm.
d60402

Như được hiển thị trong stackoverflow.com/a/19658646/2914140 , giải pháp này sẽ hiển thị các nút khi không có thông báo hộp thoại nào được đặt.
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
Sự khác biệt của điều này với 2 câu trả lời hàng đầu là gì?
FindOutIslamNow,
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.