其他分享
首页 > 其他分享> > android – SupportMapFragment和onMapReady

android – SupportMapFragment和onMapReady

作者:互联网

嘻嘻

我一直在寻找几个小时,尝试了不同的东西,其中大部分已经包括在内.我希望你们能帮助我显然没有看到的东西.

我的片段中有一个SupportMapFragment用于Maps.我以前有这个工作但由于某种原因它现在崩溃与nullpointer.在搜索了几个小时并阅读了更多文档后,我发现我使用了一种不推荐的方式,因此我尝试使用建议的文件:onMapReady.但是,即使我正在使用它也无法识别该功能

com.google.android.gms.maps.SupportMapFragment

这是我的xml与片段:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/frameLayoutMainAct"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <fragment
        android:id="@+id/mapView"
        android:name="com.google.android.gms.maps.SupportMapFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <View
        android:id="@+id/map_overlay"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</FrameLayout>

这是从OnViewCreated开始的代码:

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    if(GooglePlayServicesUtil.isGooglePlayServicesAvailable(MainActivity.getContext()) == ConnectionResult.SUCCESS) {
        initMap();
        if (locations != null) {
            addMarkers();
        }
        moveMapToCuracao();
    }
}

public void initMap() {
    final SupportMapFragment myMAPF = (SupportMapFragment) getFragmentManager()
            .findFragmentById(mapView);
    myMAPF.getMapAsync(new OnMapReadyCallback() {
        @Override
        public void onMapReady(GoogleMap googleMap) {
            mGoogleMap = googleMap;

            mGoogleMap.setPadding(50, 0, 0, 0);
            mGoogleMap.getUiSettings().setMyLocationButtonEnabled(false);
            mGoogleMap.setMyLocationEnabled(true);
            mGoogleMap
                    .setOnMyLocationChangeListener(new OnMyLocationChangeListener() {

                        @Override
                        public void onMyLocationChange(Location location) {
                            // TODO Auto-generated method stub
                            GeomagneticField field = new GeomagneticField(
                                    (float) location.getLatitude(),
                                    (float) location.getLongitude(),
                                    (float) location.getAltitude(), System
                                    .currentTimeMillis());

                            // getDeclination returns degrees
                            mDeclination = field.getDeclination();
                        }

                    });

            if (locations != null) {
                addMarkers();
            }
            moveMapToCuracao();
        }
    });
}

更新:感谢Eugen更新了代码

但是stil使用NullPointerException在getMapAsync()上崩溃.

解决方法:

地图片段是您向另一个片段膨胀的布局的一部分(让我们称之为父片段).膨胀的片段成为父片段的活动BUT的子片段.您必须询问父片段的子片段管理器:

final SupportMapFragment myMAPF = (SupportMapFragment) getChildFragmentManager()
        .findFragmentById(mapView);

标签:android,google-maps,supportmapfragment
来源: https://codeday.me/bug/20190528/1171707.html