1. 程式人生 > >Fragment 使用add 和 hide 生命週期

Fragment 使用add 和 hide 生命週期

1.先add兩個Fragment ,然後立馬hide這兩個Fragment ,再然後顯示其中一個Fragment

//先add
FragmentTransaction beginTransaction = getFragmentManager().beginTransaction();
videoFragment = new NewSDAndCloudVideoFragment(NewSDAndCloudVideoFragment.SRC_FROM_PLATFORM);
sdFragment = new NewSDAndCloudVideoFragment(NewSDAndCloudVideoFragment.SRC_FROM_SD);
beginTransaction.add(R.id.new_content_fl,videoFragment);
beginTransaction.add(R.id.new_content_fl,sdFragment);
beginTransaction.commit();

//在hide	
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.hide(webFragment);
transaction.hide(videoFragment);
transaction.hide(sdFragment);
transaction.commit();

//在顯示其中的一個Fragment
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.show(videoFragment);
transaction.commit();

其生命週期的顯示如下:

I/Fragment_A(18015): onAttach
I/Fragment_A(18015): onCreate
I/Fragment_A(18015): onCreateView
I/Fragment_A(18015): onActivityCreated

I/Fragment_A(18015): onAttach
I/Fragment_A(18015): onCreate
I/Fragment_A(18015): onCreateView
I/Fragment_A(18015): onActivityCreated

I/Fragment_A(18015): onHiddenChanged : true
I/Fragment_A(18015): onHiddenChanged : true
I/Fragment_A(18015): onHiddenChanged : false

I/Fragment_A(18015): onStart
I/Fragment_A(18015): onStart
I/Fragment_A(18015): onResume : isHiden  =false
I/Fragment_A(18015): onResume : isHiden  =true

ps: 其建立過程 是一個Fragment 從 onAttach 到 onActivityCreated執行完成之後,在執行另為的一個, 然後交替執行 onStart 和 onResume

2. 如果只add兩個Fragment 其生命週期如下

I/Fragment_A(27457): onAttach
I/Fragment_A(27457): onCreate
I/Fragment_A(27457): onCreateView
I/Fragment_A(27457): onActivityCreated
I/Fragment_A(27457): onAttach
I/Fragment_A(27457): onCreate
I/Fragment_A(27457): onCreateView
I/Fragment_A(27457): onActivityCreated
I/Fragment_A(27457): onStart
I/Fragment_A(27457): onStart
I/Fragment_A(27457): onResume : isHiden  =false
I/Fragment_A(27457): onResume : isHiden  =false

也就是不會呼叫 onHiddenChanged

3.如果新增完成然後再兩個Fragment交替show 和 hide ,那麼只會呼叫 onHiddenChanged, 其中返回其是否顯示的狀態

I/Fragment_A(27457): onHiddenChanged : true
I/Fragment_A(27457): onHiddenChanged : false
I/Fragment_A(27457): onHiddenChanged : true
I/Fragment_A(27457): onHiddenChanged : false

4.其銷燬過程
I/Fragment_A(27457): onPause
I/Fragment_A(27457): onPause
I/Fragment_A(27457): onStop
I/Fragment_A(27457): onStop
 
I/Fragment_A(27457): onDestroyView
I/Fragment_A(27457): onDestroy
I/Fragment_A(27457): onDetach

I/Fragment_A(27457): onDestroyView
I/Fragment_A(27457): onDestroy
I/Fragment_A(27457): onDetach

ps: 在銷燬過程中, 交替指向 onPasue 和 onStop , 然後 一個一個執行 onDestroyView 到 onDetach 過程

瞭解Fragment 的add / show / hide 使用的生命週期後, 就可以準確的利用生命週期對業務邏輯進行處理了...