5

Sto cercando di ottenere l'handle su tutte le nuove API di ActionBar e Fragments. Ho un'attività principale e voglio che gestisca due schede diverse. Sto usando ActionBarSherlock per supportare la versione precedente di ICS.Fragment onResume non viene chiamato dopo il distacco di Fragment e quindi riattaccato

Ogni scheda contiene un proprio Fragment (ognuno è una sottoclasse di SherlockListFragment) ho preso a lavorare in fondo bello, ma ho un problema che io sono sicuro che è stupido, ma non riesco a capirlo yet:

La prima volta che viene visualizzato ogni frammento, tutto è OK, l'elenco è popolato e quindi i MenuItem nell'azioneBar.

Ma la seconda volta che viene visualizzata una scheda (dopo swicth e switch-back), non viene popolato l'elenco né gli oggetti del menu ActionBar.

Questo è come mi sto passando le schede:

@Override 
public void onTabSelected(Tab tab, FragmentTransaction transaction) { 
    SherlockListFragment toAttach = // Find the right fragment here... 

    if (toAttach != null) { 
     if (toAttach.isAdded() == false) { 
      transaction.add(R.id.tab_placeholder, toAttach, 
        REMINDER_FRAGMENT_TAG); 
     } else { 
      transaction.attach(toAttach); 
     } 
    } 
} 

E onTabUneselect sto staccando il frammento:

@Override 
public void onTabUnselected(Tab tab, FragmentTransaction transaction) { 
    SherlockListFragment toDetach = // Find the right fragment 
    if (toDetach != null) { 
     transaction.detach(toDetach); 
    } 
} 

sto popolando le liste e il menu ActionBar in onResume:

@Override 
public void onResume() { 
    super.onResume(); 
    setHasOptionsMenu(true); 
    fillRemindersList(); 
} 

ho anche provato a onStart e onCreateView ma non ha aiutato ...

Quindi cosa mi manca qui? E se ci sono altri problemi nel mio codice di cui non sono a conoscenza, per favore dillo.

Grazie!

EDIT:

ho appena confermato che onResume dose non vengono chiamati dopo passo a schede, che è sicuramente sbagliato dal momento che sto staccando e riattaccando ... Perchè sono commutazione schede le Strada sbagliata?

risposta

2

Provare a utilizzare transaction.remove (frammento) in onTabUnselected e transaction.replace in onTabSelected.

+0

Grazie, spero che questa sia la risposta, anche se non è più rilevante, perché sono passato a List Navigation. (Ha più senso nel mio caso, e funziona perfettamente :)) –

+0

Nel mio caso chiamare 'FragmentTranaction.remove (frammento # 1)' nel frammento # 1 appena prima di chiamare 'FragmentTransaction.commit()' mi aiuta a forzare il frammento # 1 passare attraverso onPause() ... onDestroyView() in sostituzione e passare attraverso onCreateView() ... onResume() quando torno al frammento # 1 premendo il tasto indietro. –

0

Esecuzione di beginTransaction() e commit() al di fuori di questo codice presumo o hai dimenticato? Si può vedere un trucco qui utilizzato dai campioni così: https://github.com/JakeWharton/ActionBarSherlock/blob/master/samples/fragments/src/com/actionbarsherlock/sample/fragments/FragmentTabs.java

+0

Né! Come puoi vedere sto implementando l'interfaccia ActionBar.TabListener. Nei callback di TabListener si ottiene un FragmentTransaction pronto per l'uso (Ovvero - "iniziato") e tu ** mus not ** chiama commit come dice esplicitamente la documentazione. Inoltre, i frammenti vengono scambiati, quindi non è così ... –

+0

Ah davvero, mi dispiace per quello. –