2012-08-28 3 views
7

Jestem początkującym samoukiem i cenię cierpliwość! Dzięki!OnClickListener wewnątrz niestandardowego alertdialog Android

W środowisku Eclipse wykonałem niestandardowy alert z własnym plikiem xml ("custom_dialog") i nazywa się "usernamealert".

Chcę, aby wyświetlał się komunikat, jeśli użytkownik nie podał jeszcze nazwy użytkownika (np. Nazwa_użytkownika.length == 0).

Wewnątrz tego układu mam textView ("Jakie jest twoje imię?"), EditText i przycisk ("usernameButton").

Przed umieszczeniem w onclicklistener przycisku, wszystko działało. To była moja (istotna) 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(); 

Kiedy umieściłem na nim ten folder, to się zepsuł! Gdzie powinienem go umieścić?

(Oto co próbowałem ... wszystko w moim 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(); 



} 
}); 

Po kodzie I powiedział:

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

Ponownie pracował zanim zacząłem bawić z przycisk!!

+0

afte r godzin wyszukiwania, a na końcu umieszczenie pytania, po prostu zorientowałem się, jak 2 minuty później! Wszystko, co powinienem zrobić inaczej, to zmiana sposobu znalezienia przycisku: Button usernameButton = (Button) usernamealert.findViewById (R.id.usernameButton); powinno być: Button usernameButton = (Button) dialoglayout.findViewById (R.id.usernameButton); // dialoglayout to cokolwiek nazwałeś Widok – delfina

+0

Witamy w StackOverflow! Czy możesz przesłać swoje rozwiązanie jako odpowiedź i zaakceptować jako poprawną odpowiedź po tym, jak pozwala. Ułatwi to ludziom w przyszłości znalezienie rozwiązania, jeśli mają ten sam problem. – FoamyGuy

+0

Twoja odpowiedź pomogła mi .. chociaż proszę, aby twoja odpowiedź była bardziej czytelna .. idę dodać swoją odpowiedź poniżej – mcr619619

Odpowiedz

2

Spróbuj tego.

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

Sprawdź, czy to działa, lub jeśli pomaga w pewien sposób.

+1

Jak mogę zamknąć to okno dialogowe, gdy dodaję niestandardowy onClickListener na ImageView? – 4ndro1d

+0

@ 4ndro1d Użyj "dialog.dismiss();" wewnątrz metody onClick, która znajduje się w metodzie setOnClickListener(); – AJW

7

To jest potrzebne, aby określić, gdzie będzie poszukiwanie kod przycisku, jeśli jej tylko „findViewById” byłoby szukać w xml przyjmującego, powinno być

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

Jest to część mojej klasy, Hireteachernegotiate.class, który posiada układ 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(); 

To jest układ dialogowe

<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

nazwa układu dialogowego to "dialoghireteachernegotiate.xml" – mcr619619