Fragment使用之生命周期add hide show 和replace 的不同


下面這張Fragment生命周期圖大家應該看得很多了: 1354170699_6619

fragment切換有兩種方式 1 :用add  hide show (有利於保持fragment 中view的狀態)  2 :replace

方法1:

 FragmentTransaction ft = getFragmentManager().beginTransaction();
 ft.hide(Fragment1);
 ft.add(R.id.simple_fragment, Fragment2);
 ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
 ft.commit();

Fragment1不走任何生命周期,但會調onHiddenChanged方法

Fragment2 onCreate  >  onCreateView  >   onStart   >onResume

回到Fragment1,Remove Fragment2:

FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.remove(Fragment2);
ft.show(Fragment1);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.commit();

Fragment1還是不走任何生命周期,調onHiddenChanged方法

Fragment2 onPause  >  onStop  >onDestoryView  >onDestory
用這種方法切換,Fragment在隱藏時並不會走onDestoryView,所以顯示時也不會走onCreateView,所有View都一直保存在內存中。

 

方法2:replace

FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.simple_fragment, Fragment2);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.commit();

Fragment1 onPause  >  onStop  >onDestoryView  >onDestory
 
Fragment2 onCreate >onCreateView  >onStart  > onResume
 

replace 中 在 commit 前加入 ft.addToBackStack(null);

那么可以把原來的Fragment放入棧中,走onDestoryView方法,但不會onDestory,返回時,直接onCreateView,不再onCreate.
返回直接調用popBackStack()方法:

getFragmentManager().popBackStack();


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM