fragmentmanagerでバックスタックエントリーを管理します
-
24-10-2019 - |
質問
クリアする方法 BackStackEntries
の FragmentManager
?これは、フラグメントオブジェクトを変更するために使用するコードです。
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
Fragment homeFragment = new Home();
fragmentTransaction.replace(R.id.mainFragement, homeFragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
特定の状況では、完全なバックスタックエントリを削除する必要があります。 Fragment Managerには、そのための特定の方法が見つかりませんでした。あなたはなにか考えはありますか?
解決
私はあなたが求めていることをしていると思う方法に取り組んできましたが、ドキュメントから理解できたのは、この方法がバックスタックを空にするかどうか、またはコンテナを表示します。基本的に、スタックの上部にあるエントリが見つかり、そのエントリを含むすべてを削除します。他の誰かが否定的な意味があると思ったら、私は非常に興味があるので私に知らせてください:
public static void clearBackStack(FragmentManager manager){
int rootFragment = manager.getBackStackEntryAt(0).getId();
manager.popBackStack(rootFragment, FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
他のヒント
これは私にとってうまく機能します:
clearFragments(FragmentManager fm) {
while (fm.popBackStackImmediate());
}
あなたは正しいです、ドキュメントを読むことができる限り、スタックをクリアする方法はありません。
これは大きな問題です。 Androidの問題をアップロードしてみてください トラッカーを発行します そして、誰かがそれを見ることを願っています。私はまだ待っています 私の.
これはかなりハックですが、あなたはあなたの終わりを試してみることができます Activity
そして再びそれを始めます。スタックがクリアされる可能性があります。
すべてのバックスタックをクリアしたい場合は、おそらく以前のコンテキストに関連していないことをするからです。その場合、新しいアクティビティを開始する必要があります。
私が理解し始めているように、フラグメントで、アクティビティはフラグメントの容器として機能します。断片間の独立性を保ちながら、コンテキストに基づいてアクティビティでそれらを整理するようにしてください。
あなたの場合、特定の状況が発生した場合、新しいアクティビティを起動し、この新しいアクティビティを古いアクティビティに配置するのではなく、この新しいアクティビティに希望のフラグメントを配置できます。この新しいアクティビティは、フラグメントの新しいスタックを処理します。そうすれば、コードがもう少しカプセル化されていますか?
この説明的な返信をご覧ください。 Commonswareの返信
それが役に立てば幸い!
Fragment ManagerでPopbackStack()呼び出しを試しましたか?