2012-10-20 9 views
5

Uso la barra delle azioni in cui sono presenti schede, ciascuna scheda è un frammento. Tutto è grande, tranne quando faccio rapido passaggio tra le schede. Quando faccio la commutazione rapida, ottengo questo errore:java.lang.IllegalStateException: voce ricorsiva per eseguire Transazioni pendenti con commutazione rapida

java.lang.IllegalStateException: Recursive entry to executePendingTransactions 
at android.support.v4.app.FragmentManagerImpl.execPendingActions(Unknown Source) 
at android.support.v4.app.FragmentManagerImpl$1.run(Unknown Source) 
at android.os.Handler.handleCallback(Handler.java:615) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:137) 

Ecco il mio codice per OnTapSelected

if (mFragment == null) { 

    mFragment = (SherlockFragment) SherlockFragment.instantiate(mActivity, mClass.getName(), mArgs); 
    ft.add(android.R.id.content, mFragment, mTag); 


} else { 


    ft.attach(mFragment); 
} 

un modo per risolvere questo problema? O se no, come posso almeno prendere questa eccezione (come dove mettere il try/catch) così la mia app non si arresta?

grazie

+0

dove stai commettendo la frammentazione? – toadzky

+0

Non lo sono. Quando aggiungo un listener di schede, eseguo il commit solo nel costruttore. Ma onTabSelected, non mi impegno dopo aver aggiunto/attaching.should I? – Snake

+0

se non si esegue il commit, nessuna delle modifiche viene effettivamente applicata. non penso che venga commesso automaticamente. ecco i [documenti] (http://developer.android.com/reference/android/app/FragmentTransaction.html#commit()) – toadzky

risposta

3

invece di utilizzare allegare, provare a utilizzare Mostra/Nascondi. avrai bisogno di riferimenti a tutti i tuoi frammenti, ma se li aggiungi tutti, mostra quello giusto e nascondi il resto che potrebbe risolverlo.

+0

In effetti, lo ha risolto. Grazie mille, – Snake

+1

@Snake Per favore scrivi il codice, che hai corretto, –

+0

Attenzione però: Questo avrà bisogno di un * lotto * di memoria in più poiché tutti i frammenti devono essere sempre nello heap; Potrebbero verificarsi eccezioni OutOfMemory. (so che è molto vecchio ma la gente continua a seguire questo suggerimento). –

Problemi correlati