2012-12-28 6 views
17

Mögliche Duplizieren Rückkehr:
How do I know the map is ready to get used when using the SupportMapFragment?Google Play-Service - SupportMapFragment.getMap() immer null

Ich bin derzeit die Prüfung der neuen Maps API V2, aber ich bin wirklich Probleme, immer es funktioniert richtig.

Mein Problem ist, dass getMap() immer Null zurückgibt.

Ich habe den Anruf in 3 verschiedenen Punkten getestet:

  1. onCreate()
  2. onResume()
  3. in einem Handler, die einige Sekunden nach der Karte genannt wird, ist bereits auf dem Bildschirm sichtbar
  4. Hier

ist der Code:

public class MapActivity extends FragmentActivity { 

private SupportMapFragment mMapFragment; 

@Override 
protected void onCreate(Bundle arg0) { 
    super.onCreate(arg0); 
      setupMap(); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    setupMap(); 
    new Handler().postDelayed(new Runnable() { 

     @Override 
     public void run() { 
      setupMap(); 
     } 
    }, 5000); 
} 

private void setupMap() { 
    if (getSupportFragmentManager().findFragmentById(R.id.fragment) == null) { 
    mMapFragment = CustomMapFragment.newInstance(); 
     getSupportFragmentManager().beginTransaction() 
       .add(R.id.map_wrapper, mMapFragment).commit(); 
    } 
    GoogleMap map = mMapFragment.getMap(); 
    if (map != null) { 
     mMapFragment.getMap().getUiSettings().setZoomControlsEnabled(true); 
     mMapFragment.getMap().getUiSettings().setZoomGesturesEnabled(true); 
     mMapFragment.getMap().setMyLocationEnabled(true); 
    } 
} 

Was mache ich falsch?

+0

es in der Tat, eine Schande, dass ich nicht feststellen, dass Fragen über die Suchfunktion :(Ich werde meine Probe Abhilfe als Antwort schreibt Dank CommonsWare – Goddchen

+0

Erstens: Was Art des Geräts, auf dem Sie diesen Code ausgeführt haben? Physisches Gerät oder Emulator (auf dem möglicherweise keine Play Services installiert waren) –

Antwort

47

Wie CommonsWare in der verknüpften Frage angegeben hat, tritt das Problem nur auf, wenn das SupportMapFragment programmgesteuert und nicht ein <fragment> XML-Tag erstellt wird.

Wenn die Karte programmgesteuert erstellt wird, ist die Karte unter onActivityCreated() verfügbar. Also meine Lösung ist folgende:.!

mMapFragment = new SupportMapFragment() { 
      @Override 
      public void onActivityCreated(Bundle savedInstanceState) { 
       super.onActivityCreated(savedInstanceState); 
       GoogleMap map = mMapFragment.getMap(); 
       if (map != null) { 
        //Your initialization code goes here 
       } 
      } 
     }; 
+0

Good find bruder +1 – Sameer

+7

Es sollte kein nicht statisches inneres Fragment erstellt werden, da der Compiler automatisch den Konstruktor erstellt äußere Klasse für das Fragment als Argument. Dann bei Fragment-Wiederherstellung erhalten Sie 'InstantiationException', weil es keinen leeren Standardkonstruktor für das Fragment gibt. –

+0

Wie können Sie das tun, aber auch Optionen geben? Normalerweise instanziieren wir w ith SupportMapFragment.newInstance (Optionen); – Deminetix