2013-10-07 26 views
5

Sto cercando di caricare SupportMapFragment dinamicamente in un frammento, qui è il mio metodo onCreateView():SupportMapFragment.getmap() restituisce null

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
      View contentView = inflater.inflate(R.layout.frag_map_layout, null); 
      shopDtos=ShopListFragment.shopDtos; 
      fragment =SupportMapFragment.newInstance(); 
      FragmentTransaction ft = getFragmentManager().beginTransaction(); 
      ft.replace(R.id.map_content, fragment); 
      ft.commit(); 
      map = fragment.getMap(); 
      mapMarker = map.addMarker(new MarkerOptions().position(new LatLng(0, 0)) 
        .icon(BitmapDescriptorFactory 
          .fromResource(R.drawable.maps_pin))); 
     return contentView; 
    } 

Purtroppo, ho la mappa GoogleMap come null. Qualche suggerimento su come creare un mapfragment in modo dinamico?

+0

Controllare i registri, molto probabilmente non hai abilitato l'API di google maps nella console dei servizi di gioco. – PravinCG

+0

no .. il suo caricamento quando aggiungiamo frmento direttamente al file xml ... ma .... il problema è che ... frgment.getmap() restituisce null .. in modo che non posso aggiungere marcatori alla mappa – ranjith

+0

possibile duplicato di [Inizializza MapFragment in modo programmatico con Maps API v2] (http://stackoverflow.com/questions/13733299/initialize-mapfragment-programmatically-with-maps-api-v2) –

risposta

13

mappa richiede un certo tempo per caricare, quindi è necessario eseguire il codice nel gestore ->

Handler handler = new Handler(); 
handler.postDelayed(new Runnable() 

    @Override 
    public void run() { 
     GoogleMap googleMap = SupportMapFragment.newInstance(new GoogleMapOptions().zOrderOnTop(true)).getMap(); 
     FragmentTransaction ft = getFragmentManager().beginTransaction(); 
     ft.replace(R.id.map_content, fragment); 
     ft.commit(); 
     if(googleMap != null) { 
      googleMap.addMarker(new MarkerOptions().position(result)).setVisible(true); 

      // Move the camera instantly to location with a zoom of 15. 
      googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(result, 15)); 

      // Zoom in, animating the camera. 
      googleMap.animateCamera(CameraUpdateFactory.zoomTo(14), 2000, null); 

      googleMap.getUiSettings().setZoomControlsEnabled(false); 
      googleMap.getUiSettings().setCompassEnabled(false); 
      googleMap.getUiSettings().setMyLocationButtonEnabled(false); 

      handler.removeCallbacksAndMessages(null); 
     } 

     else { 
      handler.postDelayed(this, 500); 
     } 
}, 500); 
+0

la mappa si sta caricando ma il problema è lo stesso puo ' t aggiungi un marker alla mappa – ranjith

+0

ora ho anche il mio oggetto googlemap come null .... – ranjith

+0

hai impostato 'setVisible (true)' sul marcatore. –

3

Basta provare a utilizzare il seguente codice. Ha funzionato per me.

public class MapFragment extends SupportMapFragment { 

    GoogleMap mapView; 
    private Context context; 

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

    @Override 
    public View onCreateView(LayoutInflater mInflater, ViewGroup arg1, 
     Bundle arg2) { 
     View view = super.onCreateView(mInflater, arg1, arg2); 

     return view; 
    } 

    @Override 
    public void onInflate(Activity arg0, AttributeSet arg1, Bundle arg2) { 
     super.onInflate(arg0, arg1, arg2); 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     context = getActivity(); 
     mapView = getMap(); 
    } 
} 
2

C'è un mucchio di domande duplicati che vanno in giro lo stesso argomento ... non riesco a capire come la bandiera come un duplicato e poi mettere una risposta su di esso ...

Ecco il link per l'altro: Android SupportMapFragment.getMap() returns null

E la risposta potenziale postato anche lì:

Controlla il tuo file XML di layout. Ho notato che non stavo facendo riferimento: android: name = "com.google.android.gms.maps.SupportMapFragment", ma piuttosto : android: name = "com.google.android.gms.maps.MapFragment"

Il nome dovrebbe essere: android: name = "com.google.android.gms.maps.SupportMapFragment"

+0

Questo era il vero problema per me! Molte grazie.! –

1

E 'successo con me una volta in un nuovo dispositivo acquistato con i servizi di Google Play non ancora installato/aggiornato . Con altre note citate, naturalmente, considera anche questo.

0
getChildFragmentManager().findFragmentById(R.id.map) 

Provare getChildFragmentManager() in frammento.

Problemi correlati