在我的应用程序中,我试图删除地图片段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)
我搜索了很多,并没有任何有用的东西。
有人可以帮我吗?
答案 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()