alertDialog.getButton() method gives null pointer exception android

后端 未结 3 552
借酒劲吻你
借酒劲吻你 2020-11-27 17:20

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. Wh

相关标签:
3条回答
  • 2020-11-27 17:48

    Thanks wieux. But for new developers understanding purpose I am re-writing code below

    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) {                                                
        }             
    }); 
    dialog.show(); 
    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);        
    
    0 讨论(0)
  • 2020-11-27 18:01

    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

    0 讨论(0)
  • 2020-11-27 18:01

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

    0 讨论(0)
提交回复
热议问题