54

FragmentTransactions をバック スタックからポップしてカスタム アニメーションを処理する方法を使用または理解するのに問題があります。具体的には、「アウト」アニメーションを呼び出すことを期待していますが、そうではないようです。

フラグメント トランザクション (FragmentTransaction) を処理する簡単な方法があります。ここでは、フラグメントを追加し、カスタム トランジションを適用して、フェードイン/フェードアウトします。また、これをバックスタックに追加して、ユーザーが戻るボタンでそのトランザクションを元に戻し、基本的にフラグメントが追加される前の状態に移動できるようにします。

protected void changeFragment() { 
    FragmentTransaction ft = fm.beginTransaction(); 
    ft.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out); 
    ft.add(R.id.fragment_container, new TestFragment()); 
    ft.addToBackStack(null); 
    ft.commit(); 
} 

すべてがうまく機能しますが、ユーザーが戻るボタンをクリックしても、遷移アニメーションは元に戻りません。私が予想していたのは、フラグメントが削除されると、フェードアウト アニメーションが使用されるということでした。代わりに、(アニメーションなしで) ポップアウトするように見え、その後、コンテナーがフェードインするように見えます。これが正確に起こっていることかどうかはわかりませんが、フラグメントは確実にフェードアウトしていません。

私のアプリケーションは互換性ライブラリを使用してフラグメントのサポートを追加していますが、これは Honeycomm (android-11) にも適用できると想定しています。ここで私が何か間違ったことをしているだけなのか、それとも期待しすぎているだけなのか、誰か知っていますか? 理想的には、Gmail (Xoom の場合) がメッセージをクリックして先に進み、[戻る] ボタンを使用して戻るのと同じように、フラグメントをアニメーション化したいと考えています。戻るボタンの機能を無効にして、自分のフラグメント状態に追いつく必要がないことが望ましいです。なぜなら、取り消したいいくつかの「トランザクション」がある可能性があり、私は車輪を再発明するのが好きではないからです。

Android Developers Group でも質問されています: http://groups.google.com/group/android-developers/browse_thread/thread/1136a3a70fa0b6e9

4

3 に答える 3

50

私はこれを使用します:

ft.setCustomAnimations(R.anim.slide_in, R.anim.hyperspace_out, R.anim.hyperspace_in, R.anim.slide_out);

戻るボタンを押すと、トランジションが逆に機能します。

于 2012-06-08T16:13:30.267 に答える
29

このバグは 3.2 リリースで修正され、次の新しい API が追加されました。

http://developer.android.com/reference/android/app/FragmentTransaction.html#setCustomAnimations(int, int, int, int)

互換性ライブラリにはまだバックポートされていないことに注意してください (バグ レポートに記載されています)。

于 2011-09-30T20:20:13.680 に答える
5

これはバグです。バグ レポート 15623を参照してください。Android プロジェクト メンバーの 1 人は、この修正はリリース 3.1 には遅すぎるとコメントしましたが、次のリリースに含める必要があります。

同じメンバーが言うには…

問題は、フラグメントを現在の場所に配置するために実行されたのと同じアニメーションが pop 操作で実行されることです。たとえば、上のスライドの例では、前方操作 (古いフラグメントをスタックにプッシュし、新しいフラグメントをビューに移動する) で、古いフラグメントを中央から左にスライドさせ、新しいフラグメントを中央からスライドさせます。まさに中心。スタックがポップされると、これらと同じアニメーションが実行されます。最新のフラグメントは、右から中央にスライドすることによって「アウト」アニメーション化されます (その後、削除されるため消えます)。古いフラグメントはスタックから取り出され、中央から左にアニメーション化されます...画面のすぐ外です。

于 2011-07-06T19:43:00.137 に答える