2012-03-19 5 views
25

Mam prosty program, aby pokazać okno dialogowe, z widokiem editekstowym w nim, i słuchać pozytywnych/negatywnych przycisków, aby wykonać niestandardową akcję w każdym (przeczytaj, że edittext i zapisać jego zawartość do zmiennej aktywności).Interfejs Android okna dialogowego uzyskać wewnętrzne widoki okna dialogowego

Problem pojawia się, gdy nie widzę sposobu odzyskania bieżącego okna dialogowego z interfejsu okna dialogowego (a następnie nie mogę odzyskać żadnego widoku w oknie dialogowym).

Prawdopodobnie jest to pytanie typu noob, ale po przeszukaniu google nie mam na nie odpowiedzi.

Mój kod jest następujący

LayoutInflater li = LayoutInflater.from(this); 
View myView = li.inflate(R.layout.my_layout, null); 

AlertDialog.Builder cDialog = new AlertDialog.Builder(this); 
cDialog.setView(myView); 
cDialog.setPositiveButton(R.string.start_download, new DialogInterface.OnClickListener() { 
    @Override 
    public void onClick(DialogInterface dialog, int which) { 
    //here the code to retrieve dialog 
    } 
}); 
cDialog.create(); 

Wszelkie pojęcia o tym, gdzie można znaleźć to?

Odpowiedz

61

można odzyskać widoki z Dialog w onClick() z:

EditText edit = (EditText) ((AlertDialog) dialog).findViewById(R.id.the_id_of_view); 
+0

Cześć slukian. Próbowałem to zrobić, ale ta instancja pochodzi z klasy DialogInterface, a nie z okna dialogowego. DialogInterface nie udostępnia metody findViewById ... więc nie jest przydatne pobieranie zawartości danego okna dialogowego. – user1220817

+2

@ user1220817 Ten parametr 'dialog' jest dialogiem, który otrzymał kliknięcie. Prześlij go do 'AlertDialog', a następnie wywołaj' findViewById() 'w ten sposób:' EditText edit = (EditText) (dialog (AlertDialog)) .findViewById (R.id.editText1); '. – Luksprog

+0

Oh nice! dziękuję bardzo, nie zauważyłem, że DialogInterface można odlać bezpośrednio do okna dialogowego. Jeszcze raz dziękuję :) – user1220817

13

ten sposób zjazdy idealny w moim kodu:

public void onClick(DialogInterface dialog, int which) { 

    Dialog dialog2 =Dialog.class.cast(dialog); 
    EditText edit = (EditText) dialog2.findViewById(R.id.myedittext); 

} 

okrzyki

4

Masz już odniesienie do Widok, który zawiera tekst edycji. Dlaczego nie użyć go bezpośrednio? Po prostu upewnij się, że widok jest ostateczny, abyś mógł uzyskać do niego dostęp w anonimowej klasie OnClickListener.

LayoutInflater li = LayoutInflater.from(this); 
final View myView = li.inflate(R.layout.my_layout, null); 
// don't forget to mark myView as final 

AlertDialog.Builder cDialog = new AlertDialog.Builder(this); 
cDialog.setView(myView); 
cDialog.setPositiveButton(R.string.start_download, new DialogInterface.OnClickListener() { 
    @Override 
    public void onClick(DialogInterface dialog, int which) { 
    //here the code to retrieve dialog 
    EditText edit = (EditText) myView.findViewById(R.id.the_id_of_view); 
    } 
}); 
cDialog.create(); 
-1

można uzyskać Dialog wrócił z metodą show() alertBuidler.

AlertDialog.Builder adb = new AlertDialog.Builder(YourActivity.this); 
//...code to add methods setPositive an setNegative buttons 

wywołać metodę show() z adb i dostać Dialog jak poniżej:

final AlertDialog dialog = adb.show(); 

Więc można wywołać dowolny przycisk swojego okna w dowolnym miejscu kodu w swojej działalności:

dialog.getButton(DialogInterface.BUTTON_POSITIVE).performClick();//or 
dialog.getButton(DialogInterface.BUTTON_NEGATIVE).performClick();//or 
dialog.getButton(DialogInterface.BUTTON_NEUTRAL).performClick();