首页 > 解决方案 > Mapbox:如何从 Mapbox 定义的 Fragment 中获取 MapView 的引用?

问题描述

我在这里遵循了 Mapbox 的说明https://docs.mapbox.com/android/maps/examples/support-map-fragment/,我可以成功地从 MapFragment 可视化地图。

//Create the mapFragment
if (savedInstanceState == null) {
     // Create fragment
     final FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
     // Build mapboxMap
     MapboxMapOptions options = MapboxMapOptions.createFromAttributes(this, null).doubleTapGesturesEnabled(true);
     options.camera(new CameraPosition.Builder()
             .target(new LatLng(-52.6885, -70.1395))
             .zoom(14)
             .build());
      // Create map fragment
      mapFragment = SupportMapFragment.newInstance(options);
      // Add map fragment to parent container
      transaction.add(R.id.container, mapFragment, "com.mapbox.map");
      transaction.commit();
} else {
      mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentByTag("com.mapbox.map");        
      // Working with Fragment - getFragment by ID
}

if (mapFragment != null) {
    mapFragment.getMapAsync(this);
}

现在我想介绍 LineManager,以便在注释插件的帮助下定义一些行,在这里找到https://docs.mapbox.com/android/plugins/overview/annotation/ 但问题是,我可以不要初始化它,因为这部分:

LineManager lineManager = new LineManager(mapView, mapboxMap, style);

我有 mapboxMap 和样式,但我没有 mapView。

那么我们如何从 Mapbox 定义的 MapFragment 中获取 mapView 呢?

标签: javaandroidmapboxmapbox-android

解决方案


我找到了。对于以后想要使用此方法的任何人,您需要致电

mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentByTag("com.mapbox.map");
(MapView) mapFragment.getView();  // Might return null

检查它是否为空也很好,以防止出现 NullPointerExceptions。


推荐阅读