0

在我的應用程序中,我試圖刪除地圖片段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

顯示佈局文件 –

+0

@MarcinOrlowski檢查我的編輯問題 – pmb

+0

見我的回答則 –

回答

1

無法刪除片段是在XML佈局文件中「硬編碼」來稱呼super.onDestroyView()。您只能刪除自己從代碼中添加的片段。所以,如果你想讓你的地圖真的被刪除,你必須首先從代碼中添加它(所以,也就是說,在你對容器進行分片時,使用空的<FrameLayout>,從代碼初始化地圖片段,將其添加到所述容器中,然後,你需要這麼

1

試試這個(用「mapv2」是XML map_fragment的名稱):

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

    } 

}