【问题标题】:MapFragment returns NullMapFragment 返回 Null
【发布时间】:2014-09-30 20:00:09
【问题描述】:

我有一个活动和 MapFragment 类。我在 Activity 中创建了 MapFragment 对象。当我尝试获取 mapFragmentObject.getView() 时它返回 Null。但我已经创建了这样的 MapFragment

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    if (container == null) {
        return null;
    }

    view = inflater.inflate(R.layout.activity_main, container, false);

    mapView = ((MapView) view.findViewById(R.id.map));

    mapView.onCreate(savedInstanceState);
    setMapView();

    return view;
}

public void setMapView() {
    try {

        map = mapView.getMap();

        map.clear();

        LatLngBounds.Builder builder = new LatLngBounds.Builder();
        MapData mapData = MapData.getInstance();
        Double[][] latlang = mapData.getLatlang();
        String[] WONum = mapData.getWOnum();
        marker = new Marker[mapData.getLatlang().length];
        for (int i = 0; i < mapData.getLatlang().length; i++) {
            this.marker[i] = map.addMarker(new MarkerOptions()
                    .position(new LatLng(latlang[i][0], latlang[i][1]))
                    .title(" ").snippet(" " + WONum[i] + "\n"));
            builder.include(this.marker[i].getPosition());
        }

        LatLngBounds bounds = builder.build();

        CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, 60,
                60, 1);
        map.animateCamera(cu);

        map.setOnCameraChangeListener(new OnCameraChangeListener() {

            @Override
            public void onCameraChange(CameraPosition position) {

                if (position.zoom > 12.0f) {
                    map.animateCamera(CameraUpdateFactory.zoomTo(12.0f));
                } else if (position.zoom < 2.0f) {
                    map.animateCamera(CameraUpdateFactory.zoomTo(4.0f));
                }
            }
        });

    } catch (Exception e) {

    }

}

我从 Activity 调用就像 在 OnCreate 中

WOLocator locator = new WOLocator();
getFragmentManager().beginTransaction().add(locator, "Map").commit();
setContentView(getFragmentManager().findFragmentByTag("Map").getView());

我做错了什么?

【问题讨论】:

    标签: android android-mapview google-maps-android-api-2 mapfragment


    【解决方案1】:

    这实际上也是我遇到的一个问题,问题是由于地图在您当前尝试请求它时没有初始化。映射过程比标准视图设置需要更长的时间。

    您可以设置一些侦听器在准备就绪后触发,但我发现使用地图片段的 onActivityCreated 函数非常可靠(我的扩展了 SupportMapFragment)。

    因此,对于您的示例,我会尝试将您的 setMapView() 函数调用移动到片段的 onActivityCreated 函数。

    希望这会有所帮助。

    【讨论】:

    • 实际上我成功地访问了@Override public void onMapReady(GoogleMap googleMap) { } 上的地图视图
    【解决方案2】:
    in layout activity_main.xml
    
         <com.google.android.gms.maps.MapView
                    android:id="@+id/mapEditView"
                    android:name="com.google.android.gms.maps.MapFragment"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginRight="10dp" />
    

    在java文件中

    MapView mapView;
    GoogleMap map;
    LatLng CENTER = null;
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
    
        View view = null;
        view = inflater.inflate(R.layout.activity_main, container,
                    false);
        CENTER = new LatLng(latitudeDoubleValue, longitudeDoubleValue);
    
        mapView = (MapView) view.findViewById(R.id.mapEditView);
        mapView.onCreate(savedInstanceState);
    
       setMapView();
    }
    
    
    
     private void setMapView() {
        if (mapView != null) {
            locationManager = ((LocationManager) getActivity()
                    .getSystemService(Context.LOCATION_SERVICE));
    
            locListener = new MyLocationListener();
            Boolean localBoolean = Boolean.valueOf(locationManager
                    .isProviderEnabled("network"));
    
            if (localBoolean.booleanValue()) {
    
                CENTER = new LatLng(latitudeDouble, longitudeDouble);
                GetCityNameFromLatitudeLongitude getCityName = new GetCityNameFromLatitudeLongitude(
                        getActivity());
                locationString = getCityName.getCityNameFromLatitudeLongitude(
                        CENTER.latitude, CENTER.longitude);
            } else {
    
            }
            map = mapView.getMap();
            if (map == null) {
                Log.d("----------->>>",
                        "Map Fragment Not Found or no Map in it!!");
                return;
            }
    
            map.clear();
            try {
                map.addMarker(new MarkerOptions().position(CENTER)
                        .title(locationString).snippet(""));
            } catch (Exception e) {
                e.printStackTrace();
            }
            map.setIndoorEnabled(true);
    
            map.setMyLocationEnabled(true);
    
            map.moveCamera(CameraUpdateFactory.zoomTo(5));
            if (CENTER != null) {
                map.animateCamera(CameraUpdateFactory.newLatLng(CENTER), 1750,
                        null);
            }
            // add circle
            CircleOptions circle = new
    
            CircleOptions();
    
            circle.center(CENTER).fillColor(Color.BLUE).radius(10);
    
            map.addCircle(circle);
            // map.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
    
            map.setMapType(GoogleMap.MAP_TYPE_NORMAL);
            map.setOnMapClickListener(this);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-22
      • 1970-01-01
      • 1970-01-01
      • 2020-06-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多