2016-10-25 72 views
0
  • 我正在做一個帶有多個選項卡的Android應用程序,假設 有2個選項卡。一個選項卡是一個「android.support.v4.app.Fragment」,其中 包含幾個文本框和一個按鈕,另一個是「android.app.Fragment」,同時是MapFragment的一個 。
  • 事情是,第一個水龍頭呼叫另一個 「android.support.v4.app.Fragment」cardview(也支持)和 他們可以在它們之間導航一些層次結構。
  • 現在如果先在地圖上點擊一下,然後再點擊其他標籤,最後我點擊按鈕去看包含 cardviews的框架,我可以看到這些但是在後臺我也看到了 MapFragment。
  • 我不知道如何解決這個問題。我試圖使用替換,刪除, 添加,popBackStack,...此外,我曾試圖從 rootview刪除片段的框架,但沒有發生任何事情。
  • 事實是,我要把你的筆記本電腦扔出窗外。

在此先感謝!Android片段保持背景

回答

0

那麼我知道發生了什麼事。這是由於與兩個不同的片段管理器(FragmentManagerSupportFragmentManager)一起工作。
取決於您想要刪除或替換的片段類型(支持或常規),您必須使用一個或另一個片段管理器。
我創建了一個枚舉來知道什麼類型的片段是活動的(爲了移除)以及要開始什麼樣的片段(爲了替換)。
更多或更少的我了這樣的函數:

private void manageFragment (FragmentEnum nextFragment) { 

     switch (activedFragment) { 
      case SUPPORT: 
       getSupportFragmentManager().beginTransaction().remove(fragmentSupport).commit(); 
       break; 
      case NORMAL: 
       getFragmentManager().beginTransaction().remove(fragmentNormal).commit(); 
       break; 
     } 

     activedFragment = nextFragment; 

     switch (nextFragment) { 
      case SUPPORT: 
       getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragmentSupport).commit(); 
       break; 
      case NORMAL: 
       getFragmentManager().beginTransaction().replace(R.id.fragment_container, fragmentNormal).commit(); 
       break; 
     } 
    } 
0

如果您使用的是.addToBackStack("")比刪除此。併爲每個用戶調用片段.replace();方法爲你的所有片段。

+0

我有3個片段作爲我說。兩個選項卡(沒有'.addToBackStack(「」)',1-support,2-normal)和另外一個從選項卡1調用的片段(這就是爲什麼它具有'.addToBackStack(「」)'') 。 – Erqox