2010-10-12 10 views
7

Ho creato una finestra di dialogo personalizzata che estende Dialog. Un pulsante in cui la finestra di dialogo è un pulsante "OK" che l'utente è tenuto a premere una volta terminato l'inserimento delle informazioni in altri campi. Non riesco a far scattare gli ascoltatori su quel pulsante.Pulsante nella finestra di dialogo personalizzata che non risponde agli eventi Click

public class HeightDialog extends Dialog { 

    private Button okButton; 

    … 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.heightdialog); 

     this.okButton = (Button)this.findViewById(R.id.userOkWithHeight); 

     this.okButton.setOnClickListener(new android.view.View.OnClickListener() { 
     public void onClick(View v) { 
      // Does not fire 
      HeightDialog.this.dismiss(); 
      return; 
     } 
     }); 

     this.okButton.setOnLongClickListener(new OnLongClickListener() { 
     public boolean onLongClick(View v) { 
      // Does not fire 
      HeightDialog.this.dismiss(); 
      return true; 
     } 
     }); 

    this.okButton.setOnTouchListener(new OnTouchListener() { 
     public boolean onTouch(View v, MotionEvent event) { 
      // Does not fire 
      HeightDialog.this.dismiss(); 
      return true; 
     } 
    }); 

    … 
} 

Ho anche tentato un'implementazione in cui la classe Dialog implementato gli ascoltatori (http://www.androidcompetencycenter.com/2009/01/android-basics-dialogs-and-floating-activities/) invece di utilizzare classi interne (http://about-android.blogspot.com/2010/02/create-custom-dialog.html): Ancora senza fortuna.

public class HeightDialog extends Dialog implements View.OnClickListener { 

    private Button okButton; 

    … 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.heightdialog); 

     this.okButton = (Button)this.findViewById(R.id.userOkWithHeight); 

     this.okButton.setOnClickListener(this); 


    public void onClick(View view){ 
     HeightDialog.this.dismiss(); 
     return; 
    }  
    … 
} 

ho impostare i punti all'interno di ogni ascoltatori in entrambe le versioni di attuazione, e il debugger non interrompe l'esecuzione. Ho tentato di utilizzare le classi interne per gli ascoltatori che non risolvono il problema.

Eventuali indizi? Grazie

risposta

0

Al fine pulsante per intercettare clic HeightDialog deve implementare View.OnClickListener

public class HeightDialog extends Dialog implements View.OnClickListener 
{ 
} 
+0

Avere il Dialog che implementa l'ascoltatore non ha aiutato. Aggiornato la domanda con entrambi gli approcci utilizzati con lo stesso risultato. – Mike

1

Perché io non sono sicuro perché dopo i due esempi citati nel mio post non ha funzionato, ho capito come ottenerlo lavorare. Ho dovuto spostare l'allegato del mio listener al pulsante nel metodo onStart() della finestra di dialogo dal metodo onCreate() della finestra di dialogo.

apparire questo è legato a me anche l'override del metodo onStart() nella mia finestra di dialogo personalizzata:

public void onStart() { 
     super.onStart(); 
     setContentView(R.layout.heightdialog); 

     ... 
    } 

Quel codice deve avere "azzerato" i miei ascoltatori che erano nel metodo onCreate().

2
dialog = new Dialog(this); 
dialog.setContentView(R.layout.custom_dialog); 
dialog.setTitle("Custom Dialog"); 


Button dialog_btn = (Button) dialog.findViewById(R.id.dialog_button); 
dialog_btn.setOnClickListener(new View.OnClickListener() 
{ 
    // Perform button logic 
} 
+0

Chirag ha copiato la risposta dal collegamento menzionato nella risposta accettata. non bene. –

Problemi correlati