片段中的android谷歌地图 - 无法删除

时间:2014-05-21 15:26:26

标签: android android-fragments android-mapview mapfragment fragmentmanager

在我的应用程序中,我试图删除地图片段onDestroyView()。 我正在使用支持v4库。我确定在我尝试删除地图时崩溃了

layout.xml

<RelativeLayout
            android:id="@+id/countryLayout"
            android:layout_below="@id/partnersLayout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_above="@+id/mainFooterLayout">

        <FrameLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent">
            <fragment
                    android:id="@+id/map_n"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:name="com.google.android.gms.maps.SupportMapFragment"/>

        </FrameLayout>

    </RelativeLayout>

public void onDestroyView() {
        super.onDestroyView();
        Fragment fragment = (getFragmentManager().findFragmentById(R.id.map));
        FragmentTransaction ft = mActivity.getSupportFragmentManager().beginTransaction();
        ft.remove(fragment);
        ft.commit();
    }

但是当我这样做时,我有这个错误。

 java.lang.NullPointerException
            at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:651)
            at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1467)
            at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:440)
            at android.os.Handler.handleCallback(Handler.java:725)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5039)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
            at dalvik.system.NativeStart.main(Native Method)

我搜索了很多,并没有任何有用的东西。

有人可以帮我吗?

3 个答案:

答案 0 :(得分:1)

您无法删除XML布局文件中“硬编码”的片段。您只能自己删除自代码中添加的片段。因此,如果您希望您的地图真正被移除,您必须首先从代码中添加它(因此,在分割容器时使用空<FrameLayout>,从代码初始化地图片段,将其添加到所述容器中。然后您将能够在你需要时删除它。

答案 1 :(得分:1)

尝试这个(使用&#34; mapv2&#34;是xml中map_fragment的名称):

public void onDestroyView() {
    super.onDestroyView();
    if (googleMap != null) {
        getFragmentManager().beginTransaction()
                .remove(getFragmentManager().findFragmentById(R.id.mapv2))
                .commit();

    }

}

答案 2 :(得分:-1)

尝试在最后调用super.onDestroyView()