2016-07-15 7 views
0

私は5つのフラグメント(A、B、C、D、Eなど)と1つのアクティビティをコンテナで持っています。 フラグメントをコンテナに追加するときは、次のコードを使用します。中途半端なフラグメントトランザクションを削除するには

getSupportFragmentManager().beginTransaction().replace(R.id.mainContainerRL, fragment, tag).addToBackStack(tag).commit(); 

のは、私はAでいくつかのアクション時にフラグメントA. を追加したとしましょう、私はBでいくつかのアクション時に、フラグメントB. を追加し、私はCでいくつかのアクション時にC. フラグメントを追加し、私はフラグメントD.を追加しました Dで何らかのアクションが起こったら、フラグメントEを追加しました。

私のスタックは次のようになります。 A - > B - > C - > D - > E

フラグメントEで何らかのアクションが発生したら、フラグメントD、C、Bを削除して、ユーザーがクリックするとフラグメントAを直接表示する必要があります。

次のコードを使用してみました。断片Eの一部のアクションに

public void removeScreen(@NonNull String tag) { 
    FragmentManager manager = getSupportFragmentManager(); 
    Fragment fragment = manager.findFragmentByTag(tag); 
    if (fragment != null) { 
     FragmentTransaction trans = manager.beginTransaction(); 
     trans.remove(fragment); 
     trans.commitAllowingStateLoss(); 
    } 
} 

、IフラグメントD、C、B(タグIフラグメントトランザクションのために使用されるものと同じである)のタグと上記関数と呼ばれます。今

私が間違っつもりどこ誰かが指摘する場合、それは非常に参考になるボタンフラグメントDが可視になってきているが、私は、フラグメントA.

を期待していたバックをクリックします。

+0

ユーザー戻るボタンをクリックすると、 'fragmentManager.popBackStack()'を使ってE、D、C、Bフラグメントを取り除くことができます。 –

+0

私がfragmentManager.popBackStack()を実行すると、フラグメントEが最初に削除されます。しかし、私はフラグメントEを保持し、バックグラウンドにあるフラグメントB、C、Dを削除したい。 –

答えて

0

私はこの理由からDialogFragmentを使用し、インターフェースコールバックとdismiss()機能を使用してそれらをポップすることを好みます。これは、あなたがしようとしていることを実装するための最も簡単で迅速な方法です。

0

あなたが説明してきたとまったく同じ動作に到達したい場合は、この方法でそれを行うことができます:スタックの最下部に到達することになるまで、

FragmentManager manager = getSupportFragmentManager(); 
manager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); 

これは、すべてのbackstackがクリアされます。

置き換えます:

getSupportFragmentManager().beginTransaction().replace(R.id.mainContainerRL, fragment, tag).addToBackStack(tag).commit(); 

へ:

getSupportFragmentManager().beginTransaction().add(R.id.mainContainerRL, fragment, tag).addToBackStack(tag).commit(); 

あなたはコンテナにあなたのフラグメントを追加する際、使用は「交換した場合TOUはただ、それを追加

0

私はあなたの問題はここに起こると思います"メソッドを使用すると、それはactivtyのfagmentマネージャーからそれをromove、それはあなたの" removeScreen "メソッドが動作しなかった場合

+0

それ以外の場合は、すべてのフラグメントがメモリに保持されます。 http://stackoverflow.com/questions/18634207/difference-between-add-replace-and-addtackackstackを読む –

関連する問題