Fragment 使用add 和 hide 生命周期

来源:互联网 发布:横县教研室网络硬盘 编辑:程序博客网 时间:2024/06/01 09:37

1.先add两个Fragment ,然后立马hide这两个Fragment ,再然后显示其中一个Fragment 

[java] view plain copy
  1. //先add  
  2. FragmentTransaction beginTransaction = getFragmentManager().beginTransaction();  
  3. videoFragment = new NewSDAndCloudVideoFragment(NewSDAndCloudVideoFragment.SRC_FROM_PLATFORM);  
  4. sdFragment = new NewSDAndCloudVideoFragment(NewSDAndCloudVideoFragment.SRC_FROM_SD);  
  5. beginTransaction.add(R.id.new_content_fl,videoFragment);  
  6. beginTransaction.add(R.id.new_content_fl,sdFragment);  
  7. beginTransaction.commit();  
  8.   
  9. //在hide   
  10. FragmentTransaction transaction = getFragmentManager().beginTransaction();  
  11. transaction.hide(webFragment);  
  12. transaction.hide(videoFragment);  
  13. transaction.hide(sdFragment);  
  14. transaction.commit();  
  15.   
  16. //在显示其中的一个Fragment  
  17. FragmentTransaction transaction = getFragmentManager().beginTransaction();  
  18. transaction.show(videoFragment);  
  19. transaction.commit();  

其生命周期的显示如下:

[java] view plain copy
  1. I/Fragment_A(18015): onAttach  
  2. I/Fragment_A(18015): onCreate  
  3. I/Fragment_A(18015): onCreateView  
  4. I/Fragment_A(18015): onActivityCreated  
  5.   
  6. I/Fragment_A(18015): onAttach  
  7. I/Fragment_A(18015): onCreate  
  8. I/Fragment_A(18015): onCreateView  
  9. I/Fragment_A(18015): onActivityCreated  
  10.   
  11. I/Fragment_A(18015): onHiddenChanged : true  
  12. I/Fragment_A(18015): onHiddenChanged : true  
  13. I/Fragment_A(18015): onHiddenChanged : false  
  14.   
  15. I/Fragment_A(18015): onStart  
  16. I/Fragment_A(18015): onStart  
  17. I/Fragment_A(18015): onResume : isHiden  =false  
  18. I/Fragment_A(18015): onResume : isHiden  =true  

ps: 其创建过程 是一个Fragment 从 onAttach 到 onActivityCreated执行完成之后,在执行另为的一个, 然后交替执行 onStart 和 onResume


2. 如果只add两个Fragment 其生命周期如下

[java] view plain copy
  1. I/Fragment_A(27457): onAttach  
  2. I/Fragment_A(27457): onCreate  
  3. I/Fragment_A(27457): onCreateView  
  4. I/Fragment_A(27457): onActivityCreated  
  5. I/Fragment_A(27457): onAttach  
  6. I/Fragment_A(27457): onCreate  
  7. I/Fragment_A(27457): onCreateView  
  8. I/Fragment_A(27457): onActivityCreated  
  9. I/Fragment_A(27457): onStart  
  10. I/Fragment_A(27457): onStart  
  11. I/Fragment_A(27457): onResume : isHiden  =false  
  12. I/Fragment_A(27457): onResume : isHiden  =false  

也就是不会调用 onHiddenChanged


3.如果添加完成然后再两个Fragment交替show 和 hide ,那么只会调用 onHiddenChanged, 其中返回其是否显示的状态

[java] view plain copy
  1. I/Fragment_A(27457): onHiddenChanged : true  
  2. I/Fragment_A(27457): onHiddenChanged : false  
  3. I/Fragment_A(27457): onHiddenChanged : true  
  4. I/Fragment_A(27457): onHiddenChanged : false  

4.其销毁过程

[java] view plain copy
  1. I/Fragment_A(27457): onPause  
  2. I/Fragment_A(27457): onPause  
  3. I/Fragment_A(27457): onStop  
  4. I/Fragment_A(27457): onStop  
  5.    
  6. I/Fragment_A(27457): onDestroyView  
  7. I/Fragment_A(27457): onDestroy  
  8. I/Fragment_A(27457): onDetach  
  9.   
  10. I/Fragment_A(27457): onDestroyView  
  11. I/Fragment_A(27457): onDestroy  
  12. I/Fragment_A(27457): onDetach  

ps: 在销毁过程中, 交替指向 onPasue 和 onStop , 然后 一个一个执行 onDestroyView 到 onDetach 过程

了解Fragment 的add / show / hide 使用的生命周期后, 就可以准确的利用生命周期对业务逻辑进行处理了...