2012-12-07 8 views
11

Sto costruendo un'interfaccia a schede usando la barra delle azioni e il frammento. Avrei bisogno di assistenza per l'invio di dati dall'attività del contenitore al frammento.Android: accesso all'oggetto attività contenitore dal frammento utilizzando putExtra?

Per elaborare, ho oggetto lavoro in contenitore. E ho creato alcune schede basate sulle informazioni nell'oggetto di lavoro (come dettagli aziendali, dettagli dell'esperienza, ecc.). Ho bisogno di passare l'oggetto lavoro a questi frammenti in modo che possa visualizzare le rispettive informazioni.

Ho creato attività contenitore e frammenti di tabulazione. Avrei bisogno di un esempio su come passare l'oggetto attraverso di loro. Non riesco a utilizzare intent.putExtra. Posso accedere all'oggetto contenitore del genitore dal frammento?

Qualsiasi aiuto deve essere apprezzato.

Grazie.

+1

hai controllato http://developer.android.com/training/basics/fragments/communicating.html? – sandrstar

+0

@sandrstar ha incluso il link che hai postato anche nella mia risposta. – LonWolf

+0

Possibile duplicato di [Android: come può il frammento assumere una variabile globale di Attività] (http://stackoverflow.com/questions/12364434/android-how-can-fragment-take-a-global-variable-of-activity) –

risposta

44

rendere il metodo nella vostra attività, ad esempio getJob che restituirà l'oggetto Job e le sue informazioni

MyActivity extends Activity{ 
Job mJob; 

public Job getJob(){ 
    return this.mJob; 
} 
} 

poi nel vostro frammento si esegue questa operazione:

MyFragment extends Fragment{ 

@Override 
public void onActivityCreated(){ 
    super.onActivityCreated(); 
    ((MyActivity)this.getActivity()).getJob(); 
} 
} 

uso getActivity e il metodo getJob(); per ottenere l'oggetto

+0

Molte grazie. Sono in grado di accedere all'oggetto utilizzando getActivity(). – user1829067

+0

Io lo uso ma ottengo l'eccezione Runtime. Come posso risolverlo –

+0

@ Maid786 pubblica il tuo codice. Suppongo che tu aggiunga il frammento a qualcosa di più di un'attività ona. E poi hai convertito l'attività principale in un tipo sbagliato. Fai tutte le tue attività implementando qualche interfaccia ex.IParentActivity e typecast il risultato getActivity ad esso – Greensy

2

Ci sono diversi modi per raggiungere questo obiettivo.

  1. Fai una variabile static per tenere i vostri dati e di accedere ai dati da dentro i frammenti - questo è il più veloce ma crea modelli di progettazione male se utilizzato in modo improprio.
  2. Un modo di Fragment-to-Fragment communication possible through the parent Activity è pubblicato qui: http://developer.android.com/training/basics/fragments/communicating.html È possibile utilizzare il codice di esempio per fare solo un Activity - Fragment data send.
  3. La parte superiore ha votato risposta qui: Accessing instance of the parent activity? menziona a way to avoid using static data (1.) e contiene esempi di codice sorgente utilizzando ActivityGroup

"Se avete bisogno di accedere ad alcuni valori nel tuo primo attività senza fare un riferimento statico a potresti considerare di mettere le tue attività in un gruppo di attività. "

Ciò che si sceglie è la vostra preferenza, queste sono solo alcune opzioni!


Modifica: Non sono sicuro che il numero 3 funzionerà con i frammenti poiché non ho testato un metodo simile, l'esempio è Comunicazione attività-attività.

+0

Grazie. Sto usando l'alternativa suggerita da Greensy. Se sono bloccato, vorrei provare il tuo suggerimento. – user1829067

Problemi correlati