5
Hee Guys,SupportMapFragment and onMapReady
我一直在尋找幾個小時,嘗試了不同的東西,其中大部分我已經包括在內。我希望你們能夠幫助我明顯看不到的東西。
我在Maps的片段中有一個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();
}
});
}
更新:感謝歐根的更新代碼
但stil在帶有NullPointerException的getMapAsync()上崩潰。
1.你確定你想要一個地圖片段在另一個片段內嗎? 2.使用'getMapAsync',在回調中執行你的map init,並且不要保留'mGoogleMap',因爲在getMapAsync之外使用是不安全的。 –
然後在哪裏使用getMapAsync?而我應該怎麼做呢? –
使用'getMapAsync'而不是'getMap'請參閱[this](http://developer.android.com/reference/com/google/android/gms/maps/MapFragment.html#getMapAsync%28com.google.android.gms .maps.OnMapReadyCallback%29)。你可以擴展'SupportMapFragment'。 –