0

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

布局.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)

我已经搜索了很多,无法找到任何有用的东西。

有人可以帮我吗?

4

3 回答 3

1

试试这个(“mapv2”是 xml 中 map_fragment 的名称):

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

    }

}
于 2014-12-24T09:52:05.457 回答
1

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

于 2014-05-21T15:36:58.350 回答
-1

最后尝试调用 super.onDestroyView()

于 2014-05-21T15:31:39.033 回答