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:
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...
Logcat sagt:
"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:
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 :-/
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;
}
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();
}
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: