如何在Fragment中添加MapFragment v2并将其调用到MainActivity中

时间:2015-07-04 08:55:21

标签: android google-maps android-fragments android-nested-fragment

我有一个Main活动,我无法扩展到Fragment活动。首先,我直接在其中显示我的谷歌地图,一切正常。但后来我必须使用片段,所以我将所有其他活动(除了MainActivity)转换为片段,并成功地调用它们并替换它们。但是出现了问题。当我需要将我的谷歌地图放入一个单独的片段并用我的主要活动启动时调用它..它加载地图但看起来好像它没有正确地实例化地图

我的MyMapFragment的xml包含map,如下所示:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.abdulsalamali.letscoffee.MyMapFragment">

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

        android:id="@+id/map_container"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">


        <fragment
            android:id="@+id/mapView"
            android:name="com.google.android.gms.maps.MapFragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@+id/rl_address" />


    </RelativeLayout>

</FrameLayout>

以及在此地图创建的活动中,我正在尝试像这样初始化地图

@Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        createMapView();
        // and doing some stuff here such as camera animation 
}

private void createMapView() {
        /**
         * Catch the null pointer exception that
         * may be thrown when initialising the map
         */
        try {
            if (null == googleMap) {
                MapFragment mapFragment = new MapFragment();
                FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
              //  transaction.add(R.id.rl_map_container, mapFragment).commit();
                googleMap= mapFragment.getMap();
                googleMap = ((SupportMapFragment) getChildFragmentManager()
                        .findFragmentById(R.id.mapView)).getMap();
                googleMap.setBuildingsEnabled(true);
                googleMap.setMyLocationEnabled(true);

                /**
                 * If the map is still null after attempted initialisation,
                 * show an error to the user
                 */
                if (null == googleMap) {
                    Toast.makeText(getActivity(),
                            "Error creating map", Toast.LENGTH_SHORT).show();

                }


            }
        } catch (NullPointerException exception) {
            Log.e("mapApp", exception.toString());
        }
    }

所以它不是动画它只显示地图,而不是设置当前位置,不启用myLocationEnabled按钮。实际上它将googleMap实例返回为null。

我已阅读了许多内容,并获得了嵌套片段的提示,但无法理解如何使其工作,我已经搜索了许多教程,他们正在使用我不想使用的片段活动。所以请帮助我,我想我的问题很清楚。

1 个答案:

答案 0 :(得分:1)

我发布这个作为答案,因为我自己想出来但是使用了与我的案例无关且使用不同技术的不同引用: 我在我的xml中有错误,那就是我在我的xml片段中使用了一个片段标签,它应该在其中添加一个地图片段。

所以现在我用以下方式改变了它。

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.abdulsalamali.letscoffee.MyMapFragment">

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

        android:id="@+id/map_container"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">


        <FrameLayout
            android:name="com.google.android.gms.maps.MapFragment"
            xmlns:map="http://schemas.android.com/apk/res-auto"
            android:id="@+id/mapView"

            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@+id/rl_address" />


    </RelativeLayout>

</FrameLayout>

所以这样它甚至在后退按钮上也开始工作,没有应用程序崩溃。我发布它,以便任何一个人在这种情况下有这个帖子。