java.lang.IllegalStateException: Diese Aktion kann nach onSaveInstanceState in FragmentTabHost bei der Erstellung von Aktivitäten nicht ausgeführt werden

9

Ich versuche, FragmentTabHost in einer Fragment from v4-Support-Bibliothek in FragmentActivity zu verwenden. Diese Ausnahme wird beim Debuggen in der Aktivität OnCreate ausgelöst, da Alex auf eine mögliche Bedingung hingewiesen hat, aber die Fragmenttransaktion in der Aktivität oncreate noch immer festschreibt. Wegen dieser Ausnahme wird meine Aktivität mit leeren Tabcontent mit Tabs angezeigt.

Hinweis: - 1) Ich habe die Bildschirmdrehung gesperrt - keine Ausrichtungsbedingung. 2) Dies geschieht in der Aktivität oncreate, die in den anfänglichen statges ist 3) Ich verwende commit () in der Aktivität OnCreate () 4) Als Protokollpunkte wird die Commit-Beziehung im TabHost nicht von meiner Seite ausgeführt.

Hier ist mein Protokoll: -

%Vor%

Dies ist mein Code

Aktivität:

%Vor%

Fragment mit FragmentTabHost, das an die Aktivität angehängt wird

// SplitFragment.java

%Vor%

Fragment, das als Tabcontent für das FragmentTabHost fungiert:

%Vor%

Layout von FragmentTabHost:

%Vor%     
user3475098 29.03.2014, 06:22
quelle

2 Antworten

0

Ich habe eine Lösung dafür:

  1. Kopieren Sie den gesamten Code von FragmentTabHost.
  2. Fügen Sie es in eine neue Klasse in Ihrem Projekt ein und nennen Sie es MyTabHost
  3. Ersetzen Sie alle commits () im Code durch commitAllowStateLoss ()
  4. Verwenden Sie diese Klasse - MyTabHost in Ihrem Projekt anstelle von FragmentTabHost.

Es ist hässlich, aber es funktioniert.

    
Uriel Frankel 06.12.2014 18:22
quelle
0

Ursprünglich dachte ich, das wäre wahrscheinlich ein Rotationsproblem. Aber mit deinen zusätzlichen Details denke ich, dass ich das Problem sehe.

Sie initialisieren Ihren Tabhost in einem Fragment onCreateView. In onCreateView wurde das Fragment noch keiner Aktivität hinzugefügt; Es wird einfach gefragt um das Layout zu erstellen. Es ist wahrscheinlich, dass der Sitzungsstatus noch nicht wiederhergestellt wurde (soweit es den Fragment-Transaktionsmanager betrifft), da er sich im Wesentlichen in der Mitte von Gebäude befindet (fügt die Ansichten ein).

Verschieben Sie den Tabhost-Init-Code in onActivityCreated, der nach dem Einfügen der Ansicht aufgerufen wird. I. E.:

%Vor%

Wenn immer noch Zischanfälle auftreten, versuchen Sie, es auf onResume zu verschieben (was sicherlich darauf zurückzuführen ist, dass der Status wiederhergestellt wurde).

    
C James 29.03.2014 07:25
quelle

Tags und Links