2012-03-19 16 views
25

Ho un semplice programma per mostrare una finestra di dialogo, con una vista di edittext, e ascoltare i pulsanti positivi/negativi, per eseguire un'azione personalizzata in ciascuno (leggi quell'editoriale e salva il suo contenuto a una variabile di attività).dialoginterface Android ottiene viste di dialogo interne

Il problema sorge quando non riesco a vedere alcun modo per recuperare la mia finestra di dialogo corrente dall'interfaccia di dialogo (e quindi, non riesco a recuperare nessuna vista all'interno della finestra di dialogo).

Probabilmente si tratta di una domanda noob, ma dopo alcune ricerche su google, non ho nessuna risposta.

mio codice è il seguente

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

alcun indizio su dove posso trovare questo?

risposta

61

È possibile recuperare la vista dalla Dialog nella onClick() con:

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

Ciao slukian. Ho provato a farlo, ma quell'istanza proviene dalla classe DialogInterface, non dalla finestra di dialogo. DialogInterface non fornisce il metodo findViewById ... quindi non è utile recuperare i contenuti della finestra di dialogo specificata. – user1220817

+2

@ user1220817 Quel parametro 'dialog' è la finestra di dialogo che ha ricevuto il clic. Trasmettilo a 'AlertDialog' e quindi chiama' findViewById() 'in questo modo:' EditText edit = (EditText) ((AlertDialog) dialog) .findViewById (R.id.editText1); '. – Luksprog

+0

Oh bello! grazie mille, non ho notato che DialogInterface poteva essere castato direttamente al dialogo. Grazie ancora :) – user1220817

13

In questo modo viene eseguito perfetta nel mio codice:

public void onClick(DialogInterface dialog, int which) { 

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

} 

applausi

4

Hai già riferimento al Visualizza che ha il testo di modifica. Perché non usarlo direttamente? Assicurati solo di rendere definitiva la vista in modo che tu possa accedervi nella classe anonima 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

È possibile ottenere la finestra di dialogo restituito dal metodo show() alertBuidler.

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

chiamate il metodo show() di adb e ottenere Dialog come di seguito:

final AlertDialog dialog = adb.show(); 

così si può chiamare qualsiasi pulsante della vostra finestra in qualsiasi punto del codice nella vostra attività:

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