1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Overlays an MapView zurückgeben..!

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von BFK, 27.02.2012.

  1. BFK, 27.02.2012 #1
    BFK

    BFK Threadstarter Erfahrener Benutzer

    Beiträge:
    160
    Erhaltene Danke:
    10
    Registriert seit:
    08.12.2010
    Hallo,
    ich versuche eine mapOverlay-List temporär zu speichern, so dass ich sie später nutzen kann. Das ganze soll nur dann passieren, wenn das Handy die Orientierung ändert, da ja dann alle Overlays verloren gehen.
    Die Overlays werden in einer Klasse gespeichert. (sagen wir die heisst app)

    Also desweiteren, ein paar Codestücke..:
    Code:
    MapView mapView;                                 // Google Maps    
    List<Overlay> mapOverlays;                
    
    Ich übergebe diese Liste bei der onRetainConfigChanged-Methode ab an meiner app-Klasse weiter..:
    Code:
    @Override
        public void onConfigurationChanged(Configuration newConfig) 
        {
            app.setRotationVariable(true);
            app.setOverlay(mapOverlays);
            
        }
    
    Und bei der onCreate-Methode, checke ich ob das Handy rotiert hat nehme so die richtigen Vorkehrungen..:
    Code:
    @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    if(app.getRotationVariable() == true) // wenn handy von rotation kommt 
            {
                app.setRotationVariable(false);  
               
                mapView = (MapView) findViewById(R.id.mapview);
                mapView.setBuiltInZoomControls(true);
                
                mapOverlays = app.getOverlay();
            
                mapOverlays = mapView.getOverlays();
    }
    else
            {
                mapView = (MapView) findViewById(R.id.mapview);
                mapView.setBuiltInZoomControls(true);
              
                mapOverlays = mapView.getOverlays();
            }
    }
    
    Wenn das Handy seine Orientierung ändert, verliere ich trotzdem alle Overlays, obwohl ich ja mittels:
    Code:
    mapOverlays = app.getOverlay();
    die Overlays wieder zurückgebe.
    Dachte zuerst, dass null zurückgegeben wird, aber das war nicht der Fall (habe die Items in der Liste verglichen vor und nach der rotation, waren beide gleich).

    Was mache ich falsch..?
    Ich vermute mal ich habe da was vergessen..?

    Wär für jeden Tip dankbar..!
     
  2. sixi, 28.02.2012 #2
    sixi

    sixi Erfahrener Benutzer

    Beiträge:
    237
    Erhaltene Danke:
    64
    Registriert seit:
    20.01.2009
  3. BFK, 28.02.2012 #3
    BFK

    BFK Threadstarter Erfahrener Benutzer

    Beiträge:
    160
    Erhaltene Danke:
    10
    Registriert seit:
    08.12.2010
    Bei meinem Manifest unter der jeweiligen Activity steht folgendes..:

    Code:
    android:configChanges="keyboardHidden|orientation"
    
    Also ja. Ich glaub ich bekäme ehe nen Compilerfehler wenn ich dass nicht getan hätte.
    In meinem Falle bekomme ich aber keinen Fehler, nur alle meine Overlays gehen verloren.

    Keine andere Idee..?
     
  4. Sentence, 28.02.2012 #4
    Sentence

    Sentence Erfahrener Benutzer

    Beiträge:
    242
    Erhaltene Danke:
    51
    Registriert seit:
    27.01.2011
    Phone:
    S3, S6 Edge
    Moin,
    onConfigurationChanged wird doch aufgerufen /nachdem/ sich die Config geändert hat, sonst würde das (Configuration newConfig) ja keinen Sinn machen.
    Was du nun machst ist app.setOverlay(mapOverlays); eine leere Overlay zu geben, weil sich die Config ja schon geändert hat.

    Du musst das Overlay speichern, bevor sich die Config ändert.
    Dann kannst du in onConfigurationChanged deine Methoden zum setzen des Overlay aufrufen.

    MfG
     
  5. BFK, 29.02.2012 #5
    BFK

    BFK Threadstarter Erfahrener Benutzer

    Beiträge:
    160
    Erhaltene Danke:
    10
    Registriert seit:
    08.12.2010
    Hi,

    Nee, leider nicht, on ConfigChanged wird dann erst aufgerufen, wenn sich der Zustand des Teles ändern soll.
    Ich habe Logs in 3 vers. Methoden hinzugefügt und zwar bei "onConfigurationChanged", "onDestroy" und in "onCreate".
    Und der Compiler meldete folgende Reihenfolge..:
    1. onConfigChanged
    2. onDestroy
    3. onCreate

    Edit..:
    Das einzig komische, wo du auch recht hast, ist, dass ich wirklichein leeres Overlay bei onCreate bekomme.
    Bei Abfrage bei onConfigChanged ob mein overlay leer ist (mapOverlay.isEmpty) bekomme ich false, aber
    bei onCreate bekomme ich true.

    Aber wieso..?
    Wie schon oben gesagt, ist ja die reihenfolge so, dass ich ja KEIN leeres Overlay der Klasse app übergebe.
     
    Zuletzt bearbeitet: 29.02.2012
  6. BFK, 29.02.2012 #6
    BFK

    BFK Threadstarter Erfahrener Benutzer

    Beiträge:
    160
    Erhaltene Danke:
    10
    Registriert seit:
    08.12.2010
    Es hat sich rausgestellt, dass
    Code:
    mapOverlays = mapView.getOverlays();
    
    alles wieder auf null setzt (ist ja auch logisch).
    Also ohne dieser Zeile wird das Overlay korrekt wiedergegeben.

    Allerdings wird immer noch nichts bei der Map gezeichnet und somit löst das mein Problem nicht.
     

Diese Seite empfehlen