我有一個帶有ViewPager的TabLayout。 ViewPager有四個片段F1,F2,F3和F4。 F1包含一個FrameLayout,它可以有兩個片段F11和F12。最初我用下面的代碼在FrameLayout中添加F11。上一個片段在新片段下方可見
Fragment11 fragment11 = new Fragment11();
fragment11.setArguments(getActivity().getIntent().getExtras());
getActivity().getSupportFragmentManager().beginTransaction()
.add(R.id.fragment_container, fragment11, Constants.FRAGMENT_11)
.commit();
F11包含一個ListView。當我點擊這個ListView中的任何項目/行時,F11被替換爲F12。 F12是一個細節片段。
Fragment12 fragment12 = new Fragment12();
FragmentTransaction fragmentTransaction = getActivity().getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.fragment_container, fragment12, Constants.FRAGMENT_12)
.addToBackStack(null)
.commit();
對於正常的應用程序流程,它工作正常。現在假設我現在在Fragment12中,並且我按下了主頁按鈕。現在我打開任何沉重的應用程序(相機或任何其他應用程序)來從內存中刪除我的應用程序現在我又開始了我的應用程序。
現在有兩個Fragment11和一個Fragment12是可見的,所有在同一時間。當我按回Fragment12被刪除,現在兩個Fragment11可見。當我點擊Fragment11的ListView行時,頂部的Fragment11被Fragment12取代,但是底部的Fragment11仍然存在。
這就是我想要的: 當應用程序從背景來到前景時,Fragment12應該是可見的,當我按回Fragment12應該彈出顯示Fragment11。
我該怎麼做?
在添加這兩個嵌套片段時,您可能需要使用正確的FragmentManager,getChildFragmentManager()。 – Luksprog
@Luksprog如果我使用getChildFragmentManager()代替,我找不到R.id.fragment_container。它的例外。 java.lang.IllegalArgumentException:沒有找到id爲0x7f0e014c(com.demo:id/fragment_container)的片段Fragment12 –
如果這些片段在另一個片段的佈局中使用,那麼您需要使用getChildFragmentManager()。如果你得到這個錯誤,你在代碼/佈局中做錯了什麼。你沒有發佈太多的代碼,但另一個問題是,如果你有**檢查**,F11和F12在getChildFragmentManager()中可用,然後再將它們添加到佈局中(或者在每次添加時盲目添加這些碎片使用當前代碼構造父項的實例? – Luksprog