2012-10-20 3 views
5

Ich benutze eine Aktionsleiste, in der es Registerkarten gibt, jede Registerkarte ist ein Fragment. Alles ist großartig, außer wenn ich schnell zwischen den Tabs umschalte. Wenn ich ein schnelles Schalten zu tun, ich diesen Fehler erhalten:java.lang.IllegalStateException: Rekursiver Eintrag für executePendingTransactions mit schnellem Wechsel

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) 

Hier ist für meinen Code OnTapSelected

if (mFragment == null) { 

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


} else { 


    ft.attach(mFragment); 
} 

Jede Art und Weise ich dieses Problem beheben? Oder wenn nicht, wie kann ich diese Ausnahme zumindest abfangen (wie zum Beispiel den Versuch/Fang), damit meine App nicht abstürzt?

danke

+0

Wo begehen Sie die fragmenttransaction? – toadzky

+0

Ich bin nicht. Wenn ich einen Tab-Listener hinzufüge, mache ich nur im Konstruktor Commit. Aber onTabSelected, ich verpflichte mich nicht nach dem Hinzufügen/Anfügen. Soll ich? – Snake

+0

Wenn Sie keine Festschreibung vornehmen, werden keine Änderungen wirksam. Ich denke nicht, dass es automatisch begangen wird. hier sind die [docs] (http://developer.android.com/reference/android/app/FragmentTransaction.html#commit()) – toadzky

Antwort

3

statt mit anhängen, versuchen anzeigen/ausblenden verwenden. Sie werden Verweise auf alle Ihre Fragmente benötigen, aber wenn Sie alle hinzufügen, dann zeigen Sie die richtige an und verstecken Sie den Rest, der das Problem lösen könnte.

+0

In der Tat, es hat es behoben. Vielen Dank so muuch – Snake

+1

@Snake Bitte schreiben Sie den Code, den Sie behoben haben, thnxu –

+0

Seien Sie jedoch gewarnt: Dies wird eine * Menge * mehr Speicher benötigen, da alle Fragmente auf dem Haufen die ganze Zeit sein müssen; OutOfMemory-Ausnahmen können vorkommen. (Ich weiß, das ist sehr alt, aber die Leute folgen immer noch diesem Tipp). –

Verwandte Themen