7

コンテナ内にフラグメントがあり、他のフラグメントと置き換える必要があるとします。

コードは非常に単純です。

getSupportFragmentManager().beginTransaction().
replace(R.id.content_frame,fragmentToAdd).addToBackStack(null).commit();

問題は、fragmentToAddが置換するフラグメントと類似していないことを確認したいということです。

この場合、アプリは何もしません。

だから、私は元のフラグメントを取得できます:

Fragment originalFragment=(Fragment) getSupportFragmentManager().findFragmentById(R.id.content_frame);

最終的なコードは次のようになります。

if (haveDifferentInstance(originalFragment,fragmentToAdd)){
    getSupportFragmentManager().beginTransaction().
    replace(R.id.content_frame,fragmentToAdd).addToBackStack(null).commit();}
else
    // Do nothing

では、haveDifferentInstance(フラグメントfragmentA、フラグメントfragmentB)のコードは何でしょうか?

助けてくれてありがとう。

編集

私は私が次のような何かをすることができることを知っています:

if (fragmentToAdd instanceof FragmentA)

しかし、FragmentA、FragmentB、.... Fragment Fがありますが、Fragmentのタイプごとに「if」を使用したくありません。

4

2 に答える 2

17

クラスが等しいかどうかを確認します。if(origianalFragment.getClass().equals(fragmentToAdd.getClass()))

于 2012-11-12T21:49:42.273 に答える
0

シンプルネームを確認できます。

if (fragmentToAdd.class.getSimpleName().equals(originalFragment.getClass().getSimpleName()))
{
...
}
于 2017-09-19T14:33:39.683 に答える