2012-08-28 23 views
7

Ich bin ein Autodidakt Anfänger und schätzen Geduld! Vielen Dank!OnClickListener in benutzerdefinierten alertdialog Android

In Eclipse habe ich einen benutzerdefinierten Alertdialog mit einer eigenen XML-Datei ("custom_dialog") erstellt und heißt "usernamealert".

Ich möchte einen Popup-Alarm erhalten, wenn der Benutzer noch keinen Benutzernamen eingegeben hat (zB benutzername.length == 0).

In diesem Layout habe ich eine textView ("Wie heißt du?"), EditText und button ("benutzernameButton").

Bevor Sie den onclicklistener für den Button einfügten, funktionierte alles. Das war mein (relevantes) Java:

LayoutInflater inflater = getLayoutInflater(); 
View dialoglayout = inflater.inflate(R.layout.custom_dialog, (ViewGroup)  getCurrentFocus()); 
AlertDialog.Builder usernamebuilder = new AlertDialog.Builder(this); 
usernamebuilder.setView(dialoglayout); 

AlertDialog usernamealert = usernamebuilder.create(); 

Als ich den onclicklistener reinsteckte, brach es! Wo soll ich es haben?

(Folgendes ist, was ich versucht hatte, ... alles in meinem OnCreate)

LayoutInflater inflater = getLayoutInflater(); 
View dialoglayout = inflater.inflate(R.layout.custom_dialog, (ViewGroup)getCurrentFocus()); 
AlertDialog.Builder usernamebuilder = new AlertDialog.Builder(this); 
usernamebuilder.setView(dialoglayout); 


Button usernameButton = (Button) usernamealert.findViewById(R.id.usernameButton); 
usernameButton.setOnClickListener(new OnClickListener() { 

@Override 
public void onClick(View v) { 
//store username in sharedprefs 
usernamealert.dismiss(); 



} 
}); 

Nach dem Code, den ich sagte:

if (username.length() == 0) { 
      usernamealert.show(); 
     } 

Wieder ist es arbeitete, bevor ich mit der begonnenen Messing Taste!!

+0

Afte Nach stundenlangem Suchen und dem Veröffentlichen der Frage habe ich es erst 2 Minuten später herausgefunden! Alles, was ich anders hätte tun sollen, war ändern, wie es die Schaltfläche gefunden: Button usernameButton = (Button) usernamealert.findViewById (R.id.usernameButton); sollte es gewesen sein: Button usernameButton = (Button) dialoglayout.findViewById (R.id.usernameButton); // Dialoglayout ist was auch immer Sie die Ansicht – delfina

+0

Willkommen bei StackOverflow! Können Sie Ihre Lösung bitte als Antwort posten und als richtige Antwort akzeptieren, nachdem Sie es zugelassen haben. Das wird es den Menschen in Zukunft leichter machen, die Lösung zu finden, wenn sie das gleiche Problem haben. – FoamyGuy

+0

Ihre Antwort hat mir geholfen .. obwohl bitte machen Sie Ihre Antwort besser lesbar .. Ich werde meine Antwort unter – mcr619619

Antwort

2

Versuchen Sie dies.

usernamebuilder.setCancelable(false) 
usernamebuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int id) { 
      //do what you want. 
     } 
    }); 

Sehen Sie, ob das funktioniert, oder ob es in irgendeiner Weise hilft.

+1

hinzufügen Wie verlasse ich diesen Dialog, wenn ich einen benutzerdefinierten OnClickListener auf einem ImageView hinzufüge? – 4ndro1d

+0

@ 4ndro1d Verwenden Sie "dialog.dismiss();" innerhalb der onClick-Methode innerhalb der setOnClickListener(); – AJW

7

Es ist erforderlich, um festzulegen, wo wird der Button der Code-Suche, wenn es nur „findViewById“ es in der XML des Host suchen würde, es

LayoutInflater inflater =getLayoutInflater(); 
       View myview = inflater.inflate(R.layout.dialoghireteachernegotiate, null); 
       // Inflate and set the layout for the dialog 
       // Pass null as the parent view because its going in the dialog layout 
       builder.setView(myview); 
       Button addS = (Button) myview.findViewById (R.id.bAddS); 

, einen Teil meiner Klasse sein soll Dies ist Hireteachernegotiate.class, das ein Layout hat hireteachernegotiate.xml

AlertDialog.Builder builder = new AlertDialog.Builder(this); 
       // Get the layout inflater 
       LayoutInflater inflater =getLayoutInflater(); 
       View myview = inflater.inflate(R.layout.dialoghireteachernegotiate, null); 
       // Inflate and set the layout for the dialog 
       // Pass null as the parent view because its going in the dialog layout 
       builder.setView(myview); 

       Button addS = (Button) myview.findViewById (R.id.bAddS); 
       addS.setOnClickListener(new View.OnClickListener() { 

        public void onClick(View v) { 
         //do some stuff 
        } 
       }); 

       Button minusS = (Button) myview.findViewById (R.id.bMinusS); 
       addS.setOnClickListener(new View.OnClickListener() { 

        public void onClick(View v) { 
         //do other stuff 
        } 
       }); 

       // Add action buttons 
         builder.setPositiveButton("YES", new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int id) { 


           dialog.cancel(); 
          } 
         }); 
        builder.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int id) { 
          dialog.cancel(); 
         } 
        }); 



      builder.show(); 

Dieses Layout ist das Dialog

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 

    <Button 
     android:id="@+id/bAddS" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Button" /> 


    <Button 
     android:id="@+id/bMinusS" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Button" /> 

</LinearLayout> 
+0

Name des Dialoglayouts ist "dialoghireteachernegotiate.xml" – mcr619619

Verwandte Themen