2011-12-20 14 views
8

Ho letto alcuni articoli sui frammenti, ma sono ancora confuso su come fare cosa.Frammenti metodo onClick nell'elemento frammento

Ho un MainActivity, che visualizza due frammenti affiancati. In uno dei frammenti che ho un pulsante e definito in XML layout di frammenti per il pulsante

android:onClick="buttonClicked" 

Ora voglio attuare tale metodo

public void buttonClicked(View view) 

avrei pensato che questo deve essere attuata in FragmentA.java e non in MainActivity.java. Ma funziona solo se quel metodo è implementato in MainActivity.java. Perché? Per me questo non ha senso. Pre Honeycomb un metodo appartenente ad una attività è rimasto in quella attività, ora su un tablet sto unendo molte attività a una MainActivity e tutti i diversi metodi sono unificati? Qualunque cosa metti, ad esempio, in FragmentA.java? Che cosa succede se devi avviare un'attività autonoma perché questa app viene eseguita su un palmare, quindi il metodo onClick non deve essere presente nell'attività MainActivity ma nell'attività che deve essere richiamata in quel momento. Sono abbastanza confuso al momento ...

+0

Potrebbe essere perché il layout del frammento xml viene gonfiato utilizzando il contesto di attività principale. Vediamo cosa risponderanno gli altri. – blessenm

+0

Cosa intendi con "funziona solo se il metodo è implementato in' MainActivity.java' ". Ricevete un errore o semplicemente il vostro codice non vi dà il risultato che vi aspettate? –

+3

http://stackoverflow.com/questions/7570575/onclick-inside-fragment-called-on-activity Qui viene data la stessa domanda. – kzotin

risposta

4

Non sono sicuro di quale sia il problema specifico, ma forse questo sarà di aiuto.

Dalla documentazione Android su Fragment s:

si dovrebbe progettare ogni frammento come un componente modulare e riutilizzabile attività. Cioè, poiché ogni frammento definisce il proprio layout e il proprio comportamento con i propri callback del ciclo di vita, è possibile includere un frammento in più attività, quindi è necessario progettare per il riutilizzo ed evitare di manipolare direttamente un frammento da un altro frammento.

Cioè, non si dovrebbe mai manipolare un frammento da un altro frammento; piuttosto, questo dovrebbe essere fatto attraverso l'attività sottostante. Leggi la sezione "Creazione di callback dell'evento nella sezione attività" in questo article per ulteriori informazioni (sono cose importanti !!).

D'altra parte, se si desidera che il pulsante per eseguire un'azione all'interno del Fragment stesso (cioè se si voleva un Button clic per modificare il testo di una TextView all'interno del frammento), è necessario implementare questo nel Fragment, non lo Activity (questo perché il comportamento risultante è contenuto nello Fragment e non ha nulla a che fare con il genitore Activity).

Lascia un commento e posso chiarire se il mio post è confuso ... Solo recentemente ho iniziato a capire Fragment di me stesso :).

+4

Posso confermare che la preoccupazione di AndyAndroid è ben fondata. E ho lo stesso problema con un TabHost e più FragmentActivity. Fondamentalmente, il mio metodo onClick chiamato nel layout si aspetta che quel metodo sia definito nella classe TabHost, NON il Fragment. Da qui il grande problema. –

+0

Forse non sto leggendo correttamente, questo è contrassegnato come risposta, ma come faccio a rendere il listener di 'onClick' all'interno di un frammento senza ricorrere alla creazione di listener programmaticamente? – katit

0

Beh,

credo che è legata alla gerarchia della struttura del contesto Android. L'attività è l'host di tutte le viste secondarie e quindi è possibile dire che il frammento utilizza effettivamente il contesto dell'host. Ed è per questo che quando si utilizza onClick con il sistema di frammenti, viene sempre cercato nell'attività Host di frammento.

Controllarlo. Android developer onClick attribute description

Non ho controllato una cosa ma potresti mettere una prova. Fornendo implementazione nell'attività host piuttosto che in frammento, ma usa onClick sul file di layout del frammento. Dovrebbe chiamare il metodo del genitore.

Problemi correlati