これはSupportFragmentManager
の非常に単純な解決策です。 FragmentManager
はそれほど便利な、まだ有効ではないです。
List<Fragment> fragmentList = getSupportFragmentManager().getFragments();
// You might have to access all the fragments by their tag,
// in which case just follow the line below to remove the fragment
if (fragmentList == null) {
// code that handles no existing fragments
}
for (Fragment frag : fragmentList)
{
// To save any of the fragments, add this check
// a tag can be added as a third parameter to the fragment when you commit it
if (frag.getTag().equals("<tag-name")) {
continue;
}
getSupportFragmentManager().beginTransaction().remove(frag).commit();
}
か、あなたはそれを使用するように強制(推奨されません)している場合:
.commitAllowingStateLoss();
あなたからすべてのフラグメントを削除する場合現在のフラグがヌルかisDetached()
かisRemoving()
か、またはNullPointerExceptions
になるかどうかを確認することを検討することがあります。
更新6-9-15:getSupportFragmentManger().getFragments()
のドキュメントが今明らかにhiddenですが、まだ私のコードではうまく動作します。
更新8-3-15:ここでのドキュメントのスクリーンショットはだあなたは断片のサポートライブラリを使用していない場合は、残念ながらありませんgetFragments()
利用可能であるが、それでもいくつかあります、より不便な、オプション。
- は、作成時に各
fragment
tag
又はid
与え、そして所望に応じて、それらがそれぞれfragment
を処理する繰り返し処理します。
- ので、新しい
fragment
たびにactivity
に取り付けられている、あなたがそのfragment
を格納し、次いで所望のように各fragment
を処理するためにそのデータ構造を反復することができるonAttachListener
を使用してリスナーを作成します。
getSupportFragmentManager()
を使用しない場合は、トランザクションを処理するために、代わりにgetFragmentManager()
を使用する必要があります。私の個人的な場合
'getFragments()'メソッドへのリンクを提供できますか? –
@IvanBlack、明らかに利用可能なリンクはありません。私は、この記事を書いたときにドキュメントが利用可能であったと確信していますが、APIはそれが隠されていることを示しています。 – craned