我想把地圖放到一個片段中。 我貼我使用谷歌地圖在一個片段內調用返回null
XML代碼
<fragment
android:id="@+id/contactFrag_F_map"
android:name="com.google.android.gms.maps.MapFragment"
android:layout_width="match_parent"
android:layout_height="200dp"/>
下面是我的片段名字聲明
public class ContactFragment extends MapFragment
下面是我如何初始化地圖
private void initilizeMap() {
if (googleMap == null) {
if (googleMap == null) {
googleMap = ((MapFragment) getActivity().getFragmentManager().findFragmentById(
R.id.contactFrag_F_map)).getMap();
}
// check if map is created successfully or not
if (googleMap == null) {
Toast.makeText(getActivity(),
"Sorry! unable to create maps", Toast.LENGTH_SHORT)
.show();
}
}
}
這種方法被稱爲onCreateView
的錯誤是
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.android.gms.maps.GoogleMap com.google.android.gms.maps.MapFragment.getMap()' on a null object reference
請幫助解決這個問題。問題是在下面部分
if (googleMap == null) {
googleMap = ((MapFragment) getActivity().getFragmentManager().findFragmentById(
R.id.contactFrag_F_map)).getMap();
}
EDIT 1
改變了XML來
<fragment
android:id="@+id/contactFrag_F_map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="200dp"/>
和
public class ContactFragment extends SupportMapFragment
而初始化
if (googleMap == null) {
googleMap = ((SupportMapFragment) getActivity().getSupportFragmentManager().findFragmentById(
R.id.contactFrag_F_map)).getMap();
}
但同樣的錯誤是
java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.android.gms.maps.GoogleMap com.google.android.gms.maps.SupportMapFragment.getMap()' on a null object reference
,並在該行
if (googleMap == null) {
googleMap = ((SupportMapFragment) getActivity().getSupportFragmentManager().findFragmentById(
R.id.contactFrag_F_map)).getMap();
}
爲什麼會發生這種情況發生?
編輯2
是..的的GetMap已棄用。所以,我想
MapFragment mapFragment = (MapFragment) getChildFragmentManager().findFragmentById(R.id.contactFrag_F_map);
mapFragment.getMapAsync(this);
和..
public class ContactFragment extends MapFragment implements OnMapReadyCallback {
和回調..
@Override
public void onMapReady(GoogleMap googleMap) {
theGoogleMap = googleMap;
setUpMap();
}
和setUpMap方法
public void setUpMap(){
theGoogleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
theGoogleMap.setMyLocationEnabled(true);
theGoogleMap.setTrafficEnabled(true);
theGoogleMap.setIndoorEnabled(true);
theGoogleMap.setBuildingsEnabled(true);
theGoogleMap.getUiSettings().setZoomControlsEnabled(true);
}
,誤差表示的onResume()
java.lang.RuntimeException: Unable to resume activity {com.purpletab.daga/com.purpletab.daga.activities.CoreActivity}: java.lang.NullPointerException: Attempt to invoke interface method 'void com.google.maps.api.android.lib6.e.fl.o()' on a null object reference
也
Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'void com.google.maps.api.android.lib6.e.fl.o()' on a null object reference
請嘗試'getSupportFragmentmanager()'代替'getFragmentManager()' –
http://stackoverflow.com/questions/25653898/google-maps-fragment-returning -null - 內 - 一個片段 –
@Ruben請參閱有關的IntelliJ阿米亞·的答案 – Minto