在Fragment / swipeable选项卡中加载Google Map

时间:2015-07-10 20:11:23

标签: android google-maps android-fragments

我正在使用可滑动的标签,并希望在第二个标签页面中显示一个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着陆。

希望提示:)

问候

1 个答案:

答案 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并导致错误。现在,地图的初始化正好在设置视图之后,另外我添加了一个测试。