2013-04-26 5 views
9

SlidingMenu(https://github.com/jfeinstein10/SlidingMenu)を含むアクティビティがあり、そこに3つのオプションがあります。それらをA、B1、C1と呼ぶことにしましょう。これらは、アクティビティに表示されるフラグメントに対応します。 SlidingMenuから別のオプションを選択すると、現在のフラグメントをFragmentManagerを使って新しいフラグメントに置き換えます。ポップすることなくAndroidフラグメントのバックスタックをクリアしますか?

フラグメントB1から、他の2つに行くことができます。それらをB2とB3と呼ぶことができます。ここでは、Backキーを使用してB2 - > B1またはB3 - > B1にしたいので、transaction.addToBackStack(null)を呼び出します。 B2またはB3のときにSlidingMenuからオプションを選択すると、バックスタックをクリアしたいので、この質問の中で示唆しているようにコードを使用します。Clear back stack using fragmentsは、明らかになるまでpopBackStack()を呼び出します。

これまでのところとても良いです。

フラグメントC1から、フラグメントC2に移動できます。 C1/C2がマスター/詳細設計のよりいるように私はC2は、右およびその逆からスライドするようにC1が左にスライドアウトスライドアニメーションを追加する

fragmentTransaction.setCustomAnimations(R.animator.slide_in_from_right, 
    R.animator.slide_out_to_left, R.animator.slide_in_from_left, 
    R.animator.slide_out_to_right); 

を使用します。 C2を押しながら戻るキーを押すとC1に戻り、逆のアニメーションが表示され、すべてが良好です。

しかし

あなたはSlidingMenuからAまたはB1を選択し、我々は戻ってスタックからC1を取り除くために()をpopBackStack場合、それは奇妙に見えた、右に出C2をスライド。私がしたいのは、アニメーションを実行せずにバックスタックをクリアすることですが、その方法を見つけることはできません。代わりにpopBackStackImmediate()を呼び出そうとしましたが、違いはありません。

代わりに、私はaddToBackStackを呼び出すことを避けることができ、代わりに手動でActivity.onBackPressed()を介してBackキーを押してユーザーを処理することができますが、おそらく私は見ることができませんソリューションがありますか?

答えて

6

あなたは、私が.remove()に不慣れだけれども、それはあなたが望む何をすべきと思われ、フォローを試みることができる:

悲しいこと
myFragmentClass myFragC1 = (myFragmentClass) getFragmentManager().findFragmentByTag("theTagYouUsedWhenAddingToBackStack"); 
FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
transaction.remove(myFragC1); 
transaction.commit(); 
+0

それは私が必要とするものとまったく同じようです。ありがとう! –

+0

@JonathanCaryl素晴らしい! – TronicZomB

+0

サポートライブラリv23.1.1で動作しません –

3

、私はここにそれを正しく作る方法がわからない私の解決策であります他のすべてのフラグメントによって拡張されたベースフラグメントクラスで(実際に私はかなり変更した他のstackoverflowのanswer

):

public static boolean sDisableExitAnimation = false; 

@Override 
public Animation onCreateAnimation(int transit, boolean enter, int nextAnim) { 
    if (sDisableExitAnimation && !enter) { 
     return AnimationUtils.loadAnimation(getActivity(), R.anim.clear_stack_exit); 
    } 
    return super.onCreateAnimation(transit, enter, nextAnim); 
} 
ScreenFragment.sDisableExitAnimation = true; 
manager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); 
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 

そして最後にclear_stack_exitアニメーション自体(私はFragmentManager自体からそれを取得する方法を見つけることができませんでした):あなたが呼び出す必要がスタッククリアするには210

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android"> 

    <alpha 
     android:fromAlpha="1" 
     android:toAlpha="0" 
     android:duration="220" 
     /> 

    <scale 
     android:fromXScale="1" 
     android:toXScale="0.975" 
     android:fromYScale="1" 
     android:toYScale="0.975" 
     android:pivotX="50%" 
     android:pivotY="50%" 
     android:duration="220" 
     /> 

</set> 

をこの方法であなたを」正しいクリアスタックアニメーションがあります。次の遷移を開始する前にsDisableExitAnimation変数をクリアすることを忘れないでください。

+0

本当にありがとうございました。 –

関連する問題