支持MapFragment和onMapReady
SupportMapFragment and onMapReady
嘿伙计们,
我已经搜索了几个小时并尝试了不同的东西,其中大部分我已经包括在内。我希望你们能帮助解决我显然没有看到的事情。
我的地图片段中有一个 SupportMapFragment。我曾经有过这个工作,但由于某种原因,它现在因空指针而崩溃。在搜索了几个小时并阅读了更多文档之后,我发现我使用了一种已弃用的方式,所以我尝试使用建议的方式: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
更新了代码
但是在 getMapAsync() 上仍然崩溃并出现 NullPointerException。
地图片段是您扩展到另一个片段(我们称之为父片段)的布局的一部分。膨胀的片段成为父片段的 activity 但不是 activity 的子片段。您必须询问父片段的子片段管理器:
final SupportMapFragment myMAPF = (SupportMapFragment) getChildFragmentManager()
.findFragmentById(mapView);
嘿伙计们,
我已经搜索了几个小时并尝试了不同的东西,其中大部分我已经包括在内。我希望你们能帮助解决我显然没有看到的事情。
我的地图片段中有一个 SupportMapFragment。我曾经有过这个工作,但由于某种原因,它现在因空指针而崩溃。在搜索了几个小时并阅读了更多文档之后,我发现我使用了一种已弃用的方式,所以我尝试使用建议的方式: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
更新了代码但是在 getMapAsync() 上仍然崩溃并出现 NullPointerException。
地图片段是您扩展到另一个片段(我们称之为父片段)的布局的一部分。膨胀的片段成为父片段的 activity 但不是 activity 的子片段。您必须询问父片段的子片段管理器:
final SupportMapFragment myMAPF = (SupportMapFragment) getChildFragmentManager()
.findFragmentById(mapView);