Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

alertDialog.getButton() method gives null pointer exception android

Iam planing to give create 3 buttons with layout_weight=1, not interested in custom dialog.So I have written below code.It is not working.Always yes button gives me null. Whats wrong in this code?

  AlertDialog dialog= new AlertDialog.Builder(this).create();             dialog.setIcon(R.drawable.alert_icon);             dialog.setTitle("title");             dialog.setMessage("Message");             dialog.setButton(AlertDialog.BUTTON_POSITIVE,"Yes", new DialogInterface.OnClickListener() {                  @Override                 public void onClick(DialogInterface arg0, int arg1) {                                                 }             });             Button yesButton = dialog.getButton(AlertDialog.BUTTON_POSITIVE);             Log.w("Button",""+yesButton);//here getting null             LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, 1f);             yesButton.setLayoutParams(layoutParams);             dialog.show(); 

Regards, Android developer.

like image 505
ADIT Avatar asked Jan 05 '11 12:01

ADIT


People also ask

What is the use of AlertDialog in Android?

Android AlertDialog can be used to display the dialog message with OK and Cancel buttons. It can be used to interrupt and ask the user about his/her choice to continue or discontinue. Android AlertDialog is composed of three regions: title, content area and action buttons.

Is AlertDialog deprecated?

This method is deprecated.

How many buttons can be set up on an AlertDialog?

AlertDialog. A dialog that can show a title, up to three buttons, a list of selectable items, or a custom layout.


2 Answers

Take a look here for the answer : http://code.google.com/p/android/issues/detail?id=6360

As it says in comment #4 you must call show() on your dialog before you can access the buttons, they are not available beforehand. For an automatic solution on how to modify the buttons as soon as they are ready see Mickeys answer

like image 149
vieux Avatar answered Sep 18 '22 18:09

vieux


This works for me :

AlertDialog alertDialog = new AlertDialog.Builder(this)                 .setMessage(message)                 .setCancelable(true)                 .setPositiveButton("Yes",                         new DialogInterface.OnClickListener() {                             public void onClick(DialogInterface dialog, int id) {                             //do smthng                         })                 .setNegativeButton("No", new DialogInterface.OnClickListener() {                     public void onClick(DialogInterface dialog, int id) {                         //do snthn                     }                 }).create();          alertDialog.setOnShowListener(new OnShowListener() {             @Override             public void onShow(DialogInterface dialog) {                    //                 Button positiveButton = ((AlertDialog) dialog)                         .getButton(AlertDialog.BUTTON_POSITIVE);                 positiveButton.setBackgroundDrawable(getResources()                         .getDrawable(R.drawable.btn_default_holo_dark));                  Button negativeButton = ((AlertDialog) dialog)                         .getButton(AlertDialog.BUTTON_NEGATIVE);                 positiveButton.setBackgroundDrawable(getResources()                         .getDrawable(R.drawable.btn_default_holo_dark));             }         });          alertDialog.show();  

only in this order, call alertDialog.setOnShowListener after create()

like image 23
Mickey Tin Avatar answered Sep 21 '22 18:09

Mickey Tin