[英]Keep Fragment state when switching tabs
我有4個標簽A,B,C和D。我想保留以前的標簽視圖。 例如:標簽A(默認)-> B->A。返回標簽A時,我希望標簽A的視圖與以前相同
這是我的代碼:
private void replaceFragment(Constants.BottomTab bottomTab) {
Fragment fragment = getSupportFragmentManager().findFragmentByTag(bottomTab.getValue());
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
if (fragment == null) {
switch (bottomTab) {
case A:
fragment = new A();
break;
case B:
fragment = new B();
break;
case C:
fragment = new C();
break;
case D:
fragment = new D();
break;
}
transaction.replace(R.id.main_container, fragment,bottomTab.getValue() );
transaction.addToBackStack(bottomTab.getValue()); // Tag
transaction.commit();
Log.v(">>>", "Create fragment: " + fragment.getTag());
} else { // pop from stack
transaction.replace(R.id.main_container, fragment, bottomTab.getValue());
transaction.commit();
Log.v(">>>", "Found fragment: " + fragment.getTag());
}
}
從選項卡B切換到選項卡A時,它會不斷重新創建
我知道另一種方法是使用ViewPager
和ViewPager.setOffscreenPageLimit(4)
但是上述代碼的解決方案是什么?
有人可以幫忙嗎? 提前致謝!
作為一個簡單的解決方案,我建議您保留對這些片段的引用,並僅在它們為null時才創建它們。 因此可能是這樣的:
private Fragment aFrag;
private Fragment bFrag;
private Fragment cFrag;
private Fragment dFrag;
private void replaceFragment(Constants.BottomTab bottomTab) {
Fragment fragment = getSupportFragmentManager().findFragmentByTag(bottomTab.getValue());
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
if (fragment == null) {
switch (bottomTab) {
case A:
if (aFrag == null) aFrag = new A();
fragment = aFrag;
break;
case B:
if (bFrag == null) bFrag = new B();
fragment = bFrag;
break;
case C:
if (cFrag == null) cFrag = new C();
fragment = cFrag;
break;
case D:
if (dFrag == null) dFrag = new D();
fragment = dFrag;
break;
}
transaction.replace(R.id.main_container, fragment,bottomTab.getValue() );
transaction.addToBackStack(bottomTab.getValue()); // Tag
transaction.commit();
Log.v(">>>", "Create fragment: " + fragment.getTag());
} else { // pop from stack
transaction.replace(R.id.main_container, fragment, bottomTab.getValue());
transaction.commit();
Log.v(">>>", "Found fragment: " + fragment.getTag());
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.