Mittwoch, 30. Januar 2013

Google Maps Android v2 SupportMapFragment

Anders als die Android Fragmente, können die MapFragmente NICHT mehrfach initialisiert werden.
Korrigiert mich, falls ich falsch liege, aber ich hatte es so verstanden, dass MapFragmente einmalig als eine View initialisiert werden und diese auch explizit wieder entfernt werden müssen (so zumindest wird es in der API von SupportMapFragment beschrieben).

Nun hatte ich das Vergnügen zum ersten Mal Google Maps in eine App zu integrieren. Meine Anforderung an eine App sind grundsätzlich, dass diese Android Versionen bis Froyo (2.2) unterstützen sollten. Also muss in diesem Fall das SupportMapFragment verwendet werden (ich verwende bei meinen Projekten auch grundsätzlich die Sherlock-Library, damit die älteren Android Versionen die aktuellen Features nutzen können (wie diese in ein Projekt eingefügt werden kann, wird in diesem Post erklärt)).

In dem Beitrag habe ich bereits erklärt wie die Google Maps API v2 (und der entsprechende API Key) in das Projekt eingebunden werden kann. In diesem Beitrag möchte ich erläutern wie ein MapFragment hinzugefügt werden kann.
  • erzeuge ein neues Android-Projekt
  • Als erstes sollte ein Layout für die MainActivity-Klasse (diese erbt von SherlockFragmentActivity) erzeugt werden 
    • in den meisten Fällen reicht es, wenn das Layout aus einem einfachen FrameLayout besteht, dann können die Fragmente an dieser Stelle ausgetauscht werden
  • Als nächstes wird ein Layout für das Map-Fragment angelegt, das sieht wie folgt aus:
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
         android:id="@+id/map"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:name="com.google.android.gms.maps.SupportMapFragment"/>
  • Dann wird eine weitere Klasse "FragmentMap" erzeugt, die von SupportMapFragment erbt 
    • Hierbei ist zu beachten, dass Fragmente immer einen leeren Konstruktor benötigen, sonst kann das in speziellen Fällen zu Fehlermeldungen führen. Dazu reicht es aus wenn man eine Funktion (z.B. newInstance()) schreibt, die einfach eine neue Instanz des entsprechenden Fragments zurückliefert
  • Nun zur MainActivity:
    • in der onCreate() Methode wird der FragmentManager (in meinem Fall handelt es sich um den SupportFragmentManager) aufgerufen und eine neue Instanz vom Fragment "FragmentMap" an die Stelle des FrameLayouts hinzugefügt:
        FragmentMap fragment = FragmentMap.newInstance();
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        transaction.replace(R.id.fragment_content, fragment);
        transaction.addToBackStack(null);
        transaction.commit();
    • Das ist eigentlich schon alles, was in der MainActivity passiert. Sobald diese aufgerufen wird, wird einfach an die Stelle des FrameLayouts das Map-Fragment hinzugefügt.
  • Und jetzt noch zu "Fragment-Map":
    • Es sollte folgender Code in der onCreateView() Methode stehen:
       View v = super.onCreateView(inflater, parent, savedInstanceState);
       return v;
  • Das wars :) und viel Spaß beim ausprobieren


 

Keine Kommentare:

Kommentar veröffentlichen