我正在使用可滑动的标签,并希望在第二个标签页面中显示一个mapsfragment,但每次我尝试访问地图时,都会出现nullpointerexception。按照我的片段/标签的代码。
public class tab2_advanced extends Fragment implements OnMapReadyCallback{
private GoogleMap gmap;
private static View view;
MapView ourMap;
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.tab2_erweitertezusage, container, false);
Log.i("TAB2", "Start.");
//without the following lines regarding null or not null, the fragment loads the map, but i want to set markers and select a position on the map.
if (gmap==null) {
Log.i("Tab2", "Map null");
gmap = ((SupportMapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
gmap.setMyLocationEnabled(true);
}
if (gmap != null) {
Log.i("Tab2", "Map not null");
gmap.setMyLocationEnabled(true);
}
return v;
}
@Override
public void onMapReady(GoogleMap googleMap) {
Log.i("Aufruf onMapReady", "Darstellung"+gmap);
//Später Übergabe der Pos aus DB
LatLng sidney= new LatLng(49.7685, 9.9382);
gmap.setMyLocationEnabled(true);
gmap.moveCamera(CameraUpdateFactory.newLatLngZoom(wuerzburg, 13));
gmap.addMarker(new MarkerOptions()
.title("Sydney")
.snippet("The most populous city in Australia.")
.position(wuerzburg));
}
我的XML文件如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="50dp">
<LinearLayout
android:orientation="vertical"
android:id="@+id/layoutMap"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="200dp"
android:name="com.google.android.gms.maps.SupportMapFragment"/>
</LinearLayout>
如果片段代码中的注释中没有描述部分,则地图会加载内容。在这种情况下仍然有一些部分缺失,如果地图不是null,但是我尝试了它并且每次都在null中以及下面的NullpointerException着陆。
希望提示:)
问候
答案 0 :(得分:0)
好的,我通过以下方式解决了这个问题:
if (gmap==null) {
Log.i("Tab2", "Map null");
gmap = ((SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map)).getMap();
gmap.setMyLocationEnabled(true);
}
if (gmap != null) {
Log.i("Tab2", "Map not null");
gmap.setMyLocationEnabled(true);
gmap.getUiSettings().setZoomControlsEnabled(true);
actLocation.getLocation(getActivity(), locationResult);
LatLng actPos = new LatLng(organizerGPS.latitude, organizerGPS.longitude);
Log.i("tab2", "actPos: " + actPos);
gmap.setMyLocationEnabled(true);
gmap.moveCamera(CameraUpdateFactory.newLatLngZoom(actPos, 13));
...
使用getChildFragmentManager的提示很好,但是NullpointerException的原因是,视图为null并导致错误。现在,地图的初始化正好在设置视图之后,另外我添加了一个测试。