2013-08-16 14 views
18

Sto seguendo il tutorial di Google per Android e ho scoperto che ci sono due modi per ottenere i richiami dei widget come per titolo (o solo onClick - non lo so).Android best practice: attributo onClick XML o setOnClickListener?

Sono uno sviluppatore Java Swing senior quindi l'approccio di classe interna mi fa sentire a casa :) Ma capisco che l'approccio xml è più recente - quindi google deve averlo aggiunto per un motivo.

Qual è il ragionamento qui? È "più bello" farlo in questo modo sulla piattaforma Android, se l'approccio della classe interna ora sia evitato (sulle versioni che lo supportano)?

+0

controllare il collegamento, questo è correlato alla tua domanda ..... [collegamento] (http://stackoverflow.com/questions/7453299/difference-between-onclick-event-and-onclicklistener) – AndroUser

+6

Ho letto che argomento e mentre tocca la materia, è più di natura tecnica e non discute le migliori pratiche - quindi ho creato un nuovo argomento. –

+1

@martin_dk: dal tuo punto di vista, questa domanda dovrebbe essere riaperta per accettare nuove risposte? Poiché questa non è una domanda duplicata. – gunar

risposta

0

È possibile definire widget come pulsante sia per xml che per programma. Può dare una capacità di aggiungere l'ascoltatore in entrambe le direzioni. Quindi non c'è vantaggio sull'uno rispetto all'altro.

Se si desidera eseguire un lavoro specifico del layout da xml, l'androide ha fornito la possibilità di farlo.

Ma qualcuno può definire il layout in modo progmatico e quindi dovrà definire listener di clic dal codice.

Ma ci sono persone che usano un mix di esso.

Spero che tu capisca cosa intendo.

Se lo si fa in modo programmatico, è sufficiente scrivere onClick() e iside che scrive un caso di commutazione e in base agli ID di vista è possibile definire il comportamento che ritengo sia più facile da utilizzare.

19

Non utilizzo l'attributo XML onClick perché ciò significa che lo Activity che sta gonfiando l'XML deve implementare il metodo del valore onClick. Ma se si esegue un refactoring e si modifica questo metodo, si ottengono eccezioni di runtime se le modifiche non sono correlate a XML. O se si desidera utilizzare alcuni include o merge.

Per aggiungere altro: se si utilizzano i frammenti è necessario delegate the click event per il frammento che ha definito l'attributo XML onClick.

È meno codice, ma per mantenere/rifattorizzare tale codice rende le cose difficili e aperte agli errori. Quindi non usarlo nel codice di produzione.

+1

Ha senso (nel mio mondo), grazie per il vostro contributo! –

+1

Amico, questa è l'unica risposta logica ... sarei ancora più duro e dire che chiunque usi questo attributo onClick è semplicemente stupido ... è l'unico modo di usare il riflesso che non userei mai, e sono estremamente scioccato che Google abbia ancora questo nei loro documenti. – TacB0sS

0

Se i pulsanti saranno lì sempre e la stessa azione verrà eseguita sempre, quindi l'uso di gestori di eventi dichiarativi ha senso. Come quando non hai nemmeno bisogno di fare un findViewById() per quel pulsante.

Se si desidera abilitare/disabilitare il clic o possono generare pulsanti in modo dinamico ecc. Ecc., È quindi opportuno impostare dinamicamente i gestori di eventi nel codice.

-1

View.OnClickListener è un'interfaccia che definisce il metodo onClick(View).

Implementerete sia l'interfaccia che il metodo nel codice.