2. add show hide 模式下,如果add多个fragment ,再hide不需要展示的fragment时 , 被hide的fragment 会多经历 onHiddenChanged 方法,其调用时机在onCreate - onCreateView 之间,即: onAttach - onCreate - onHiddenChanged - onCreateView - onActvityCreated - onStart - onResume - onPuase - onStop - on...
transaction.replace(R.id.main_ll, fragment3,"3"); //transaction.add(R.id.main_ll, fragment3,"3"); //transaction.addToBackStack(null); transaction.commit(); } }); } 1.测试replace 操作:启动app,然后点击Fragment1,再点击Fragment2,log如下: 2.测试返回键 在上一步骤的基础上点击物理返回键Lo...
然后我们在反复点击FragmentA和FragmentB按钮,发现没有任何log打印,此时证明FragmentA和FragmentB通过hide和show方法进行切换时,都只会初始化一次, 下面我们看向replace这个方法 replace: 首先replace方法,其实是remove和add方法的组合;remove就是将一个Fragment从FragmentManager中删除,如果我们切换下一个Fragment时,上一个F...
for(Fragment f:ls){ ft.hide(f); } } ft.show(baseFragment); ft.commit(); 使用此方式的生命周期如下图 使用add-hide-show方式切换Fragment生命周期 两种方式对比 1.从代码量对比看:replace切换Fragment比add-hide-show代码量要少; 2.从生命周期看:replace方式比add-hide-show方式走的生命周期要多; 两种...
Activity 被系统回收时,会主动调用 onSaveInstance() 方法来保存视图层(View Hierarchy),所以当 Activity 通过导航再次被重建时,之前被实例化过的 Fragment 依然会出现在 Activity 中,此时的 FragmentTransaction 中的相当于又再次 add 了 fragment 进去的,hide()和show()方法对之前保存的fragment已经失效了,所以就...
如果你add()了几个Fragment,使用show()、hide()方法控制,比如微信、QQ的底部tab等情景,如果你什么都不做的话,在“内存重启”后回到前台,app的这几个Fragment界面会重叠。 原因是FragmentManager帮我们管理Fragment,当发生“内存重启”,他会从栈底向栈顶的顺序一次性恢复Fragment; 但是因为官方没有保存Fragment的m...
从源码角度分析add()和replace()方法 1.Fragmentadd()和replace()方法差别 add()是添加Fragment到容器布局中,再搭配事务对象(FragmentTransaction)的show()和hide()方法来显示和隐藏Fragment,replace()顾名思义“替换”,会销毁布局容器内的已有Fragment,然后重新创建一个新的Fragment显示到布局容器中。通过一下两种方式...
replace(): 相当于旧Fragment调用remove(),新Fragment调用add()。remove()+add()的生命周期加起来 show(): 不调用任何生命周期方法,调用该方法的前提是要显示的 Fragment已经被添加到容器,只是纯粹把Fragment UI的setVisibility为true。 hide(): 不调用任何生命周期方法,调用该方法的前提是要显示的Fragment已经被添加...
但最近在写PageManager(管理页面跳转),发现切换页面时,之前的页面走完onDestoryView就直接onDestory了,回来又重新onCreate,如果用hide和show的方式,都不走生命周期,看了ApiDemo代码,发现原因,整理一下. 切换Fragment有两种方式,一种是add新的,并把旧的hide,另一种是replace. 旧的Fragment为Fragment1,新的是Fragment...
ft.remove( ):把Fragment从Activity中移除; ft.hide( ):隐藏当前的Fragment,不会销毁它; ft.show( ):显示隐藏的Fragment; 上面我们为什么要使用ft.replace( )呢?因为ft.replace( )是ft.remove( )与ft.add( )的合体,相当于先移除Fragment后,再添加一个Fragment。