2016-11-12 6 views
0

Ich folgte diesem Tutorial auf dieser Website: http://www.c-sharpcorner.com/article/xamarin-android-create-google-map-with-marker/. Es funktioniert 100% in MainActivity, aber sobald ich den Code in das Fragment verschiebe, erhalte ich eine Fehlermeldung, die besagt, dass das Objekt nicht auf eine Instanz gesetzt ist. Was könnte das Problem sein? Hier ist mein Code:So verwenden Sie FragmentManager in Fragment - Xamarin

public class ViewAlert : Fragment, IOnMapReadyCallback 
{ 
    View view = null; 

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    {      
     view = inflater.Inflate(Resource.Layout.ViewAlert, container, false); 

     try 
     { 
      SetUpMap(); 
     } 
     catch (Exception ex) 
     {     
     } 
     return view; 
    } 

    private void SetUpMap() 
    { 
     if (GMap == null) 
     { 
      FragmentManager.FindFragmentById<MapFragment>(Resource.Id.googlemap).GetMapAsync(this); 
     } 
    } 

    public void OnMapReady(GoogleMap googleMap) 
    { 
     this.GMap = googleMap; 
     GMap.UiSettings.ZoomControlsEnabled = true; 

     LatLng latlng = new LatLng(Convert.ToDouble(gpsLatitude), Convert.ToDouble(gpsLongitude)); 
     CameraUpdate camera = CameraUpdateFactory.NewLatLngZoom(latlng, 15); 
     GMap.MoveCamera(camera); 

     MarkerOptions options = new MarkerOptions() 
        .SetPosition(latlng) 
        .SetTitle("Chennai"); 

     GMap.AddMarker(options);   
    } 
} 

Der Fehler tritt auf dieser Linie:

FragmentManager.FindFragmentById<MapFragment>(Resource.Id.googlemap).GetMapAsync(this); 

Ich habe versucht:

view.FragmentManager.FindFragmentById<MapFragment>(Resource.Id.googlemap).GetMapAsync(this); 

Aber es hat nicht funktioniert.

Die Karte lädt ohne einen Marker. Der Breaking Code ist verantwortlich für das Setzen des Markers auf der Karte.

Antwort

2

Als MapFragment innerhalb Fragment platziert ViewAlert, müssen Sie verwenden die ChildFragmentManager:

ChildFragmentManager.FindFragmentById<MapFragment>(Resource.Id.googlemap).GetMapAsync(this); 
+0

Es funktionierte völlig in Ordnung. Vielen Dank –

Verwandte Themen