2016-01-04 15 views
15

1 Thêm hai mảnh để FragmentManagerPhân đoạn vẫn tồn tại sau khi xóa?

FragmentManager fm = getSupportFragmentManager(); 
FragmentTransaction ft1 = fm.beginTransaction(); 
ft1.add(containerId, fragment1, "fragment1"); 
ft1.addToBackStack(null); 
ft1.commitAllowingStateLoss(); 

FragmentTransaction ft2 = fm.beginTransaction(); 
ft2.add(containerId, fragment2, "fragment2"); 
ft2.addToBackStack(null); 
ft2.commitAllowingStateLoss(); 

2 Thay đổi điện thoại di động thiết Developer Options-> Đừng Giữ Activities-> ON

3 Remove tất cả các mảnh vỡ sau khi hoạt động đã được tái

FragmentTransaction ft3 = fm.beginTransaction(); 
for(Fragment f : fm.getFragments()) ft3.remove(f); 
ft3.commitAllowingStateLoss(); 

Câu hỏi của tôi là tại sao fm.findFragmentByTag ("fragment1") KHÔNG phải là rỗng sau khi xóa?

minSdkVersion 17 targetSdkVersion 22 compileSdkVersion 22

Trả lời

7

thử mã này cho loại bỏ các mảnh

FragmentManager manager = getActivity().getSupportFragmentManager(); 
FragmentTransaction trans = manager.beginTransaction(); 
trans.remove(myFrag); 
trans.commit(); 
manager.popBackStack(); 

tôi nghĩ rằng bạn đã không thêm phương pháp này

manager.popBackStack(); 

hoặc

getSupportFragmentManager().popBackStack() 
+0

trình như sự quyến rũ! – wonsuc

0

thay vì

ft1.add(containerId, fragment1, "fragment1"); 

thử

ft1.replace(containerId, fragment1, "fragment1"); 

và sử dụng

fragmentmanager.popBackStack(); 
1

sử dụng opBackStackImmediate() thay vì popBackStack() mà đảm bảo đoạn được lấy ra từ backstack ngay lập tức. phương pháp loại bỏ của transection không loại bỏ đoạn từ backstack nó chỉ cho transection.

0

bạn nên commit từng đoạn riêng lẻ xóa giao dịch.

mã này sẽ cam kết sau khi vòng lặp hoàn

for(Fragment f : fm.getFragments()) ft3.remove(f); 
ft3.commitAllowingStateLoss(); 

thay vì sử dụng brackets

for(Fragment f : fm.getFragments()){ 
ft3.remove(f); 
ft3.commitAllowingStateLoss(); 
} 
0

Hãy thử này ...

List<Fragment> list = getSupportFragmentManager().getFragments(); 
    if (list == null) { 
     Log.e("TAg", "No existing fragments"); 
    } 

    for (Fragment frag : list) 
    { 
     // To save any of the fragments, add this check. 
     // A tag can be added as a third parameter to the fragment when you commit it 
     if (frag.getTag().equals("tag-name")) { 
      continue; 
     } 

     getSupportFragmentManager().beginTransaction().remove(frag).commit(); 
    } 
0
  public void popAll() { 
      if (mFragmentManager != null) { 
       if (!mOnPause && mFragmentManager.getBackStackEntryCount() > 0) { 
        if (isFragmentOnStack(HomeFragment.TAG_NAME)) 
         mFragmentManager.popBackStackImmediate(HomeFragment.TAG_NAME, 0); 
        else 
         mFragmentManager.popBackStackImmediate(null, 
           FragmentManager.POP_BACK_STACK_INCLUSIVE); 
       } else if (mFragmentManager.getBackStackEntryCount() > 0) { 
        mTransactionList.clear(); 
        mTransactionList.add(new FragmentPopAll()); 
       } 


} 
    } 
Các vấn đề liên quan