GoogleMaps in Fragment "herschüttlen"

ui_3k1

ui_3k1

Gesperrt
197
Hallo,

hab derzeit in meiner App ein recht witziges aber auch genauso nervtötendes Phänomen:
Ich habe Google Maps in ein Fragment eingebunden, da ich den ViewPager nutze. Hier gibt es keine Probleme, alles funktioniert wie es soll.
Probleme gibts aber, sobald ich via Intent in meine Einstellungs-Activity gehe und die Karte wieder anzeigen möchte. Hier bleibt sie nämlich mausgrau.
Auffällig ist, dass wenn ich die Bildschirmausrichtung ändere, die Karte sich bei jedem Wechsel wieder etwas mehr "aufbaut".

Hat jemand eine Idee was falsch läuft?

Erzeugt wird die Map wie folgt:
Code:
 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        // nur wenn noch keine View erstellt wurde eine neue erstellen (sonst Error: "duplicate")
        if (sView == null) sView = inflater.inflate(R.layout.location_fragment, container, false);

        if (sMap == null) {
            sMap = ((MapFragment) MainActivity
                    .sFragmentManager.findFragmentById(R.id.location_map)).getMap();
        }

        return sView;
    }
Beste Grüße
Martin


Nachtrag:

Wenn ich versuche das Fragment eigenhändig zu entfernen, ist die Map bei der zweiten Darstellung nicht mehr grau, sondern liefert einen Fehler...
Code:
  public void onDestroyView() {
        Fragment fragment = (getFragmentManager().findFragmentById(R.id.location_map));
        FragmentTransaction ft = getActivity().getFragmentManager().beginTransaction();
        ft.remove(fragment);
        ft.commit();
        super.onDestroyView();
    }
Logcat sagt:
Code:
9-30 15:09:14.811  15149-15149/de.clevercomputing.libredrive D/OpenGLRenderer Flushing caches (mode 0)
09-30 15:09:15.581  15149-15149/de.clevercomputing.libredrive D/AndroidRuntime Shutting down VM
09-30 15:09:15.581  15149-15149/de.clevercomputing.libredrive W/dalvikvm threadid=1: thread exiting with uncaught exception (group=0x41649d40)
09-30 15:09:15.581  15149-15149/de.clevercomputing.libredrive E/AndroidRuntime FATAL EXCEPTION: main
    Process: de.clevercomputing.libredrive, PID: 15149
    java.lang.RuntimeException: Unable to destroy activity {de.clevercomputing.libredrive/de.clevercomputing.libredrive.activities.MainActivity}: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
            at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3634)
            at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3652)
  [COLOR=Silver]          at android.app.ActivityThread.access$1400(ActivityThread.java:136)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5171)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:837)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:653)
            at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132)[/COLOR]
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
            at android.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1323)
            at android.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1341)
            at android.app.BackStackRecord.commitInternal(BackStackRecord.java:597)
            at android.app.BackStackRecord.commit(BackStackRecord.java:575)
            at de.clevercomputing.libredrive.frags.LocationFragment.onDestroyView(LocationFragment.java:71)
            at android.app.Fragment.performDestroyView(Fragment.java:1898)
            at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:954)
        [COLOR=Gray]   [COLOR=Silver] at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
            at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1044)
            at android.app.FragmentManagerImpl.dispatchDestroy(FragmentManager.java:1881)
            at android.app.Activity.performDestroy(Activity.java:5402)
            at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1133)
            at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3616)
            at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3652)
            at android.app.ActivityThread.access$1400(ActivityThread.java:136)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5171)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:837)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:653)
            at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132)
            at dalvik.system.NativeStart.main(Native Method)[/COLOR][/COLOR][COLOR=Silver]
09-30 15:09:17.901  15543-15543/de.clevercomputing.libredrive D/ProtectionService ***onCreate()***[/COLOR]

"java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState" <- was hat das zu bedeuten?

Der ursprüngliche Beitrag von 15:03 Uhr wurde um 16:01 Uhr ergänzt:

Hehe, nicht schlecht^^ jetzt gehts...

Hier der Code:
Code:
 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        lastUpdate = System.currentTimeMillis();

        if (sView != null) {
            ViewGroup parent = (ViewGroup) sView.getParent();
            if (parent != null) {
                parent.removeView(sView);
            }
        }
        try {
            sView = inflater.inflate(R.layout.location_fragment, container, false);
            sMap = ((MapFragment) MainActivity
                    .sFragmentManager.findFragmentById(R.id.location_map)).getMap();
        } catch (InflateException e) {

        }

        return sView;
    }

letztlich eine Mischung aus verschiedenen Lösungen von hier:
android maps v2 crashes when reopened in fragment - Stack Overflow

Strange.. das mit den "Parents" hab ich irgendwie so gar nicht auf dem Plan :-/
 
Zuletzt bearbeitet:

Ähnliche Themen

D
Antworten
23
Aufrufe
2.515
Data2006
D
M
Antworten
2
Aufrufe
863
jogimuc
J
OnkelLon
Antworten
13
Aufrufe
1.974
OnkelLon
OnkelLon
Zurück
Oben Unten