SetCustomAnimations()では、アニメーションに4つのリソースIDが必要です。本当に理解していません。誰かがそれをより明確に理解しているなら、あなたが説明できれば幸いです。
フラグメント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);
簡単なケースから始めましょう:
フラグメントAをフラグメントB(2番目のコードスニペット)に置き換えます
戻るボタンを押して、置換操作を元に戻します
今あなたの質問に答えるために。
コンテナにすでにフラグメントがあるかどうかはわかりません。両方の場合を考えてみましょう。
フラグメントAに置き換える最初の操作が呼び出されたとき、コンテナーにはすでにフラグメント(フラグメント0と呼びましょう)がありました。スタック全体をポップする場合:
コンテナが空だったため、フラグメントAとの交換は基本的に追加操作でした。スタック全体をポップする場合: