【问题标题】:Adding a google map to a navigation drawer将谷歌地图添加到导航抽屉
【发布时间】:2015-04-30 15:53:49
【问题描述】:

这是我的问题。我目前有一个导航抽屉,里面有 3 个项目。我希望其中一项是地图。我遵循了谷歌文档并成功创建了我的地图。问题是我的标记不会出现。我知道问题出在哪里,但我不确定如何解决。

这是地图片段。如您所见,我正在实现OnMapReadyCallback,并且我还包含了onMapReady() 方法。 onMapReady() 没有被调用(这就是问题所在),因为我没有调用 getMapAsync() 方法。我不知道我应该把它放在哪里,更不用说根据我的代码如何调用它了。

我还在导航抽屉中包含调用地图片段的代码。地图 xml 就像谷歌文档示例中的那样。就像我之前所说的那样;我的地图可以工作,但标记不显示,因为 onMapReady() 没有被调用。

地图片段:

public class MapsFragment extends Fragment implements OnMapReadyCallback {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.activity_maps, container, false);
        return rootView;
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        googleMap.addMarker(new MarkerOptions().position(new LatLng(29.702182, -98.124561)).title("marker"));
        googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
    }

}

导航抽屉代码:

private void selectItem(int position) {
    Toast.makeText(MainActivity.this, "Time for an upgrade", Toast.LENGTH_SHORT).show();

    // This is where the fragment view changes will be put
    Fragment fragment = null;

    switch (position) {
        case 0:
            fragment = new Blank1Fragment();
            break;
        case 1:
            //fragment = new Blank2Fragment();
            fragment = new MapsFragment();
            break;
        case 2:
            fragment = new Blank3Fragment();
            break;
        default:
            break;
    }

    if (fragment != null) {
        FragmentManager fragmentManager = getSupportFragmentManager();
        fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
        mDrawerLayout.closeDrawer(mDrawerList);
    } else {

    }
}

【问题讨论】:

  • 我对我的帖子进行了一些编辑。你能告诉我建议的代码应该去哪里以及如何实现。

标签: android google-maps android-fragments google-maps-api-3


【解决方案1】:

我遇到了同样的问题。但我是这样解决的:

public class Map extends Fragment {
    private SupportMapFragment mapFragment;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.activity_maps, container, false);
        return rootView;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        FragmentManager fm = getChildFragmentManager();
        mapFragment = (SupportMapFragment) fm.findFragmentById(R.id.mapView);
        if (mapFragment == null) {
            mapFragment = SupportMapFragment.newInstance();
            fm.beginTransaction().replace(R.id.mapView, mapFragment).commit();
        } else {
            mapFragment.getMapAsync(new OnMapReadyCallback() {
                @Override
                public void onMapReady(final GoogleMap googleMap) {
                    googleMap.addMarker(new MarkerOptions().position(new LatLng(29.702182, -98.124561)).title("marker"));
                    googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
                }
            });
        }
    }
}

因此,您需要在代码中添加方法 onActivityCreated(而不是 onMapReady),然后就会看到一个标记。

【讨论】:

    【解决方案2】:

    onMapReady() 没有被调用(这是问题所在),因为我没有调用 getMapAsync() 方法。

    是的。

    在包含地图的 Fragment 中(顺便说一句,它必须是 Fragment,而不是 Activity),您应该有一个从 XML 布局中检索到的 SupportMapFragment 对象.

    然后,只需致电getMapAsync()

    supportMapFragment.getMapAsync(new OnMapReadyCallback() {
        @Override
        public void onMapReady(final GoogleMap googleMap) {
            // ...
        }
    });
    

    Documentation

    【讨论】:

      【解决方案3】:

      如果不调用初始化地图的方法,则需要在onCreateView方法中进行初始化。

      在 onCreateView 方法中写下这段代码:

      MapsInitializer.initialize(getActivity());
      mapView = (MapView) v.findViewById(R.id.mapaPrincipal);
      mapView.onCreate(savedInstanceState);
      map = mapView.getMap();
      if(map != null) {
          ... do your changes to the map
      }
      

      【讨论】:

      • 如果对您有用,请采纳答案。提前谢谢。
      猜你喜欢
      • 2016-01-21
      • 2016-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多