2011-08-16 18 views
6

In Android sembrano esserci 3 modi comuni per gestire i clic del pulsante, quanta differenza c'è tra i metodi? E alcuni di loro sono "migliori" in qualche modo?Come gestire un pulsante su cui si fa clic su Android?

I tre metodi Continuo a vedere sono: classe

Anonymous

Trova il pulsante da esso è ID, quindi passare una nuova classe anonima per setOnClickListener, per esempio in onCreate

findViewById(R.id.myButton).setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 
     // .. Whatever 
    } 
}); 

Implementare OnClickListener

Implementare OnClickListener e passare this a setOnClickListener, quindi utilizzare un interruttore statment base all'ID pulsante, ad esempio in onCreate

findViewById(R.id.myButton).setOnClickListener(this); 

e implementare onClick come

public void onClick(View v) { 
    switch(v.getId()) { 
     case R.id.myButton: 
      // ... whatever ... 
      break; 
    } 
} 

Usa onClick XML atribute

Nel layout XML per la vostra attività, invece di dare il pulsante di un ID, utilizzare onClick come questo :

<Button 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:onClick="buttonClicked" 
    android:text="Button" /> 

Poi hanno un metodo di buttonClicked nella vostra Acitiviy come questo:

public void buttonClicked(View v) { 
    // ... whatever ... 
} 

Al momento tendo ad utilizzare l'attributo XML, ma questo è solo perché si tratta della minor quantità di codice. Quando dovrei usare gli altri metodi?

+0

+1 per la descrizione del terzo metodo. Sto solo imparando Android e non ero a conoscenza dell'attributo 'onClick'. – Mike

risposta

4

I primi due sono gli approcci classici. Quale preferisci è più una domanda Java generale che una domanda Android. Il terzo è stato aggiunto in seguito per semplificare le cose.

L'impostazione di un listener di clic su un pulsante è un'attività molto comune, ma il codice richiede un bel po 'di codice boilerplate. Un modo per ridurre l'importo di boilerplate è condividere un singolo click listener tra più pulsanti . Mentre questa tecnica riduce il numero di classi, è ancora richiede una discreta quantità di codice e richiede comunque che ogni pulsante sia un ID nel file di layout XML. Con Android 1.6, nessuno di questi è necessario. Tutto quello che dovete fare è dichiarare un metodo pubblico nella vostra attività per gestire il clic (il metodo deve avere una vista argomento)

Source

1

ho davvero sempre visto come preferenza. Non sono sicuro che esista un vantaggio in termini di prestazioni rispetto agli ultimi due metodi potrebbe essere leggermente più veloce dal momento che non stanno creando oggetti in fase di runtime.

La prima opzione isola il codice sul singolo pulsante, quindi è molto semplice eseguire il debug poiché si sa che il codice verrà eseguito solo quando si fa clic su quel pulsante. Tuttavia, molti pulsanti possono causare l'espansione dei metodi di inizializzazione su grandi dimensioni.

Gli ultimi due metodi consentono di gestire tutti i pulsanti in un unico punto che può essere comodo e pulito a volte, ma con molti pulsanti è necessario decifrare quale pulsante è stato toccato dall'utente tramite il metodo v.getId().

L'ultima opzione consente di specificare facilmente metodi specifici per pulsanti specifici in modo da poterli separare in questo modo, ma di nuovo si avranno molti metodi utilizzati per singoli scopi.

Ho sempre utilizzato il metodo inline (classe anonima) per finestre di dialogo personalizzate con pulsanti poiché mantiene il codice con il resto della finestra di dialogo anziché in un'attività o in una classe. Ho appena inizializzato i pulsanti della finestra di dialogo personalizzata quando eseguo l'override di onCreateDialog.

Implementare OnClickListener sull'attività se i pulsanti si trovano nella finestra principale.

Problemi correlati