1

これは、言葉やスニペットで説明するのは少し難しいです。そこで、問題を再現する簡単なプロジェクトを用意しました。

ダウンロード(ファイル -> ダウンロード)

最初の実行時にActivity A、hostingが表示Fragment Fされ、さらにネストされた追加の fragment がホストされますFragment F1Fragment F Buttonを押すと、Fragment F1遷移がアニメーションで表示されますFragment F2(後で問題を確認できるように、意図的にアニメーションを遅くしました)。

デバイスの戻るキーを押すと、 に戻るFragment F2トランジションが表示されFragment F1ます。(おかげでaddToBackStack) すべてうまくいきました。今度はActivity A Buttonを押してください。Fragment Fへの遷移が表示されFragment Xます。

ここで戻るキーを押すときは注意してください。Fragment X遷移が期待どおりに戻ることがわかりますFragment F。ただし、現在、アクティブなネストされたフラグメント(どちらが表示されているFragment F1Fragment F2に応じて または のいずれか)setCustomAnimations、前の呼び出しから設定されたアニメーションで遷移しているようです!

フラグメント全体ではなくsetCustomAnimations、適用された にのみ有効であるという印象を受けました。FragmentTransaction

4

1 に答える 1

0

これが正しいアプローチかどうかはわかりません。誰かがより良いアイデアを持っている場合は、私に知らせてください。

このFragmentクラスには、mNextAnimアニメーション ID を格納するために名前が付けられたフィールドがあります。

// If app has requested a specific animation, this is the one to use.
int mNextAnim;

android.support.v4.app.BackStackRecordの内部実装クラスですFragmentTransaction。トランザクション中に、mNextAnimフィールドを適切なアニメーション ID に設定しますが、後でクリアしません。

Field na = Fragment.class.getDeclaredField("mNextAnim");
na.setAccessible(true);
na.set(fragF1, 0);
于 2013-07-04T04:06:28.960 に答える