2016-11-30 14 views
4

setCustomAnimations()では、アニメーションに4つのリソースIDが必要です。本当にそれらを理解していない。誰かがそれをより鮮明に描写していれば、説明することができれば分かります。Enter/ExitとpopEnter/popExitの違いは何ですか?ポップスタックで実行するトランザクションのアニメーション

フラグメントAをプレースホルダとバックスタックに追加したとします。

FragmentTransaction ft = fm.beginTransaction(); 
     ft.replace(R.id.holder, fragA, FragmentA.FRAGMENT_NAME); 
     ft.addToBackStack(FragmentA.FRAGMENT_NAME); 
     ft.setCustomAnimations(R.anim.slide_in_from_bottom, R.anim.slide_in_from_top, R.anim.slide_in_from_left, R.anim.slide_in_from_right); 
     ft.show(frag); 
     ft.commit(); 

とフラグメントBと交換してください:

FragmentTransaction ft = fm.beginTransaction(); 
     ft.replace(R.id.holder, fragB, FragmentB.FRAGMENT_NAME); 
     ft.addToBackStack(FragmentB.FRAGMENT_NAME); 
     ft.setCustomAnimations(R.anim.slide_in_from_bottom, R.anim.slide_in_from_top, R.anim.slide_in_from_left, R.anim.slide_in_from_right); 
     ft.show(frag); 
     ft.commit(); 

次回popstack()が実行されているからであろうトランザクションのアニメーション

fm.popBackStackImmediate(FragmentB.FRAGMENT_NAME, 
           FragmentManager.POP_BACK_STACK_INCLUSIVE); 

をすれば?

/** 
* Set specific animation resources to run for the fragments that are 
* entering and exiting in this transaction. The <code>popEnter</code> 
* and <code>popExit</code> animations will be played for enter/exit 
* operations specifically when popping the back stack. 
*/ 
public abstract FragmentTransaction setCustomAnimations(@AnimRes int enter, 
     @AnimRes int exit, @AnimRes int popEnter, @AnimRes int popExit); 

答えて

9

のは、単純なケースを見てみましょう:

断片B(2番目のコードスニペット)

  • 断片Bはアニメーション
  • フラグメントAが出口を実行入力し実行してフラグメントAを置き換えアニメーション

バックボタンを押すと置換操作

  • 断片Bが実行されるアンドゥpopExitアニメーション
  • フラグメントAは、あなたの質問に答えるためにpopEnterアニメーション今

を実行します。

コンテナに既にフラグメントがあるかどうかはわかりません。のは、両方のケースを考えてみましょう:

  1. コンテナがすでにフラグメントを持っていた最初の操作が呼び出された断片Aと交換するとき(のは、それフラグメント0を呼びましょう)。全体のスタックをポップする場合:

    • フラグメントBの実行(第2のスニペットで設定)popExitアニメーション
    • フラグメント0は、コンテナがあった(最初のスニペットで設定)popEnterアニメーション
  2. を実行します空であるため、フラグメントAでの置換は基本的に追加操作でした。全体のスタックをポップする場合:容器が空になっているので

    • フラグメントBは、popExitアニメーション(第2のスニペットで設定)
    • なしpopEnterアニメーションランを実行
関連する問題