2015-07-31 2 views
17

ho aggiunto un po 'di Fragment in un TableLayout e voglio gestirli dal mio contenitore Activity, quindi ho usato questo:Come posso ottenere Frammento dalla vista?

Fragment fragment = (Fragment) tableLayout.getChildAt(i); 

ma getChildAt(int) restituisce una View e un View non poteva cast Fragment

+0

Come si aggiunge il frammento? Tramite i tag XML o utilizzando FragmentManager in Java? – Nachi

+0

Li ho aggiunti usando FragmentManager – Mohammad7G

risposta

25

Non capisco perché la gente stia sottovalutando la tua domanda. Fragments a volte può essere molto confuso, soprattutto per i principianti. Per capire il tuo problema, devi imparare cos'è un Fragment e come vengono utilizzati.

Per iniziare, uno View è qualcosa che ha esistenza sullo schermo. Gli esempi includono: TextView, EditText, Button, ecc. Sono posizionati all'interno di "layout" XML. Questi layout sono mostrati usando uno Activity.

Ora, un Fragment non è un View. Non ha alcuna esistenza sullo schermo. Invece, è una classe che gestisce semplicemente un "layout" - un po 'simile a uno Activity. Se hai bisogno della vista restituita da Framment's onCreateView(), puoi utilizzare direttamente lo findViewById() all'interno del tuo Activity.

Se avete bisogno di un riferimento alla vostra Frammento, ci sono due possibili modi per farlo:

1) Se è stato aggiunto il frammento di codice come questo

getFragmentManager() 
    .beginTransaction() 
    .replace(R.id.fragment_container_viewgroup, myFragment, FRAGMENT_TAG) 
    .commit(); 

è possibile utilizzare:

MyFragment myFragment = (MyFragment) getFragmentManager().findFragmentByTag(FRAGMENT_TAG); 

2) Se è stato aggiunto il Frammento all'interno di un file XML di layout come questo:

<fragment android:name="com.example.android.fragments.HeadlinesFragment" 
    android:id="@+id/fragmentContainer" 
    android:layout_weight="1" 
    android:layout_width="0dp" 
    android:layout_height="match_parent" /> 

È possibile utilizzare questo:

getFragmentManager().findFragmentById(R.id.fragmentContainer); 

Fondamentalmente, ogni attività ha una classe FragmentManager che mantiene tutta la attiva Fragments, e ci sono due modi di trovare loro: utilizzando un nome unico che si passa mentre mostrando un frammento, o passando l'ID vista contenitore dove è stato aggiunto il frammento.

2

È non posso ottenere un frammento come questo Dovrai aggiungere il frammento con un tag e recuperarlo con quel tag.

per aggiungere un frammento facciamo seguire:

getFragmentManager().beginTransaction().add(R.id.container, fragment, "tagTofindFragment"); 

per ottenere frammento:

fragment = getFragmentManager().findFragmentByTag("tagTofindFragment"); 

Qui tagTofindFragment è che tag che dovrebbe essere unico tra i tuoi frammenti.