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