2016-07-11 9 views
0

私はフラグメント置換のこの動作を理解できません。私のアプリケーションでは、FragmentAからFragmentB、次にFragmentC、FragmentXからFragmentXからFragmentDを移動しています。私はFragmentXをバックスタックに入れませんが、フラグメントをポップしているときに、FragmentXも呼び出されますすべてのフラグメントのonCreate()メソッドでログを設定しました)。私はその断片の断片onCreate()が呼び出されたときにそれを読みました。私はフラグメントを置き換えるために以下のコードを使用しています。アンドロイドでフラグメントを置き換えるのに変な方法

public void replaceFragment(BaseFragment fragment,boolean isToAddBackStack){ 
baseFragment = fragment; 
FragmentTransaction fragmentTransaction = fm.beginTransaction(); 

fragmentTransaction.replace(R.id.fragment_controller, fragment,  fragment.getName()); 
if(isToAddBackStack) 
    fragmentTransaction.addToBackStack(fragment.getName()); 
else 
    fragmentTransaction.addToBackStack(null); 

fragmentTransaction.commit(); 
} 

そして、私は、ユーザーがそれは私が私がFragmentManagerのリストにfragmentXを見つけられませんでしたpooping午前理由ですバックナビゲートする必要はありませんが、それでもFragmentXがout.Belowがあるウンチあるので、私は断片をpoopingためのコードの下に使用しています私はbackstackに、断片(ときIを飛び出るの他の方法があることを維持するわけではないときの断片を飛び出しながらFragmentXが呼び出されている理由私の質問があり

public void clearBackStack(){ 
    for(int i = 0; i < fm.getBackStackEntryCount(); ++i) { 
     fm.popBackStack(); 
    } 
} 

断片をpoopingために使用していたコード私はスタックをクリアすることを意味する)を飛ばして言う。

注:私が言及したように私はバックスタックをクリアすると、私はFragmentXのonCreate()が呼び出され、私のUIがハングアップするバックスタックにFragmentXを保持していません。私は理由を見つけることができません。どんな助け?

答えて

1

あなたの問題はあなたのコードのこの部分にある -

if(isToAddBackStack) 
    fragmentTransaction.addToBackStack(fragment.getName()); 
else 
    fragmentTransaction.addToBackStack(null); 

fragmentTransaction.addToBackStack(null)を呼び出すと、トランザクションがバックスタックに追加されないことを意味するものではありません。つまり、トランザクションは追加されますが、名前は付けられません。

コードからelse文を削除しても問題ありません。

... 
if(isToAddBackStack) 
    fragmentTransaction.addToBackStack(fragment.getName()); 
// no else here 
... 
+0

ここで言及しなければならないことは、私がすでにあなたが言及したようにそれを試しましたが、私が見つけたものと同じです。 –

+0

@AbdulWaheedなぜ、上記のコードを使ってみて、バックスタックを自分でポップするのではなく、フラグメントマネージャがそれを処理できるようにしてください。つまり、バックボタンを押すと、フラグメントマネージャは自動的にバックスタックの最新エントリをポップします。 – Rohan

+0

私は、ユーザーがフラグメントaにいるときにフローを制限したいと思っています.bユーザーが戻ることができますが、ユーザーがフラグメントCに来ると、前のフラグメントに行きたくないので、 –

関連する問題