如何在Fragment中使用FragmentManager - Xamarin

时间:2016-11-12 21:32:26

标签: xamarin

我在此网站上关注了本教程:http://www.c-sharpcorner.com/article/xamarin-android-create-google-map-with-marker/。它在MainActivity中100%工作,但是一旦我将代码移动到片段,我就会收到一条错误消息,指出'对象未设置为实例'。可能是什么问题呢 ?这是我的代码:

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);        
    }
}

此行发生错误:

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

我试过了:

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

但它没有用。

地图加载时没有标记。破解代码负责将标记放在地图上。

1 个答案:

答案 0 :(得分:2)

由于MapFragment位于片段ViewAlert内,您必须使用ChildFragmentManager

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