首先介绍一下ViewPager_Fragment的切换.现有四个Fragment,分别是Fragment_1,Fragment_2,Fragment_3
Fragment_1 经历 1_onAttach() 和 2_onCreate() 后,
Fragment_2也开始走了 1_onAttach()和 2_Create()方法;OncreateView();onActivityCreate()onstart();onresume();然后滑动ViewPager,当滑到Fragment_2后,
Fragment_3经历了从 1__onCreate()方法到6__onResume()方法。Fragment_1却是没有走任何生命周期方法。
Fragment_4先走了 1_onAttach(),2_onCreate()后,Fragment_1走 7_onPause,8_onStop,9_onDestroyView()。Fragment_1的生命周期终于开始走。而此时,Frment_4也已经完成了预加载.
当ViewPager中的Fragment大于等于3个的时候,除去展示开头和结尾两个Fragment的情况,ViewPager会保留一个Fragment左右两侧以及自身3个Fragment的信息。相邻的3个Fragment之间来回切换,都没有走10_onDestroy()和11_onDetach()。Fragment的10_onDestroy和11_onDetach()什么时候会ViewPager中,Fragment的10_onDestroy()以及11_onDetach()会在ViewPager所在的Activity结束后被调用。
Fragment.replace:这种模式每次replace会把生命周期全部执行一遍,如果在这些生命周期函数 里拉取数据的话,就会不断重复的加载刷新数据。
这里顺便说一下
Fragment的使用就我所知就我会的只有两种吧,一种是add方式来进行show和hide,这种方式你切换fragment不会让fragment重新刷新,而用replace方式会使fragment重新刷新,因为add方式是将fragment隐藏了而不是销毁再创建,replace方式每次都是重新创建。
1、什么是FragmentTransaction?
使用Fragment时,可以通过用户交互来执行一些动作,比如增加、移除、替换等。所有这些改变构成一个集合,这个集合被叫做一个transaction。可以调用FragmentTransaction中的方法来处理这个transaction,并且可以将transaction存进由activity管理的back stack中,这样用户就可以进行fragment变化的回退操作。可以这样得到FragmentTransaction类的实例:
FragmentTransaction的commit和commitAllowingStateLoss的区别
用add(), remove(), replace()方法,把所有需要的变化加进去,然后调用commit()方法,将这些变化应用。在commit()方法之前,你可以调用addToBackStack(),把这个transaction加入back stack中去,这个back stack是由activity管理的,当用户按返回键时,就会回到上一个fragment的状态。你只能在activity存储它的状态(当用户要离开activity时)之前调用commit(),如果在存储状态之后调用commit(),将会抛出一个异常。这是因为当activity再次被恢复时commit之后的状态将丢失。如果丢失也没关系,那么使用commitAllowingStateLoss()方法。