2011-01-05 11 views
33

Ich plane zu erstellen 3 Tasten mit layout_weight = 1, nicht in benutzerdefinierten dialog.So Ich habe unter code.It funktioniert nicht.Als Ja Schaltfläche gibt mir null . Was ist in diesem Code falsch?alertDialog.getButton() -Methode gibt Null Zeiger Ausnahme Android

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

Grüße, Android Entwickler.

Antwort

52

Werfen Sie einen Blick hier für die Antwort ein: http://code.google.com/p/android/issues/detail?id=6360

Wie es in Kommentar # 4 sagt Sie show() auf Ihrem Dialog aufrufen müssen, bevor Sie die Tasten zugreifen können, sie vorher nicht zur Verfügung stehen. Für eine automatische Lösung, wie die Tasten zu ändern, sobald sie bereit sind, sehen Mickeys answer

+1

Noch Problem persist.No Verwendung dieser Verbindung. – ADIT

+11

Bitte lesen Sie den Kommentar # 4, verwenden Sie dialog.show(); vor der Verwendung von getButton() – vieux

+1

Danke wieux.It funktioniert – ADIT

4

Dank wieux.But für neue Entwickler Zweck Verständnis Iam Umschreiben Code unten

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);   
+1

es funktioniert nicht für mich. –

43

Dies funktioniert für mich:

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

nur in dieser Reihenfolge, rufen alertDialog.setOnShowListener nach create()

+0

setOnShowListener ist API 8+ –

+1

setOnShowListener löste mein Problem –

+0

Dies sollte als die richtige Antwort markiert werden. +1 –