123

あるコンテナビューの現在のフラグメントを別のコンテナビューに置き換えたいとします。置換を使用する方が良いですか...

    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.replace(R.id.fragment_container, newFragment, null);
    ft.commit();

...または次の、表示と非表示を使用しますか?

    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.hide(oldFragment);
    ft.show(newFragment);
    ft.commit();

これを行う1つの方法はより効率的ですか?これらのメソッドをいつ使用するか、またはそれらが関連するフラグメントのライフサイクルにどのように影響するかについての多くの情報を見つけることができません。ありがとう!

4

4 に答える 4

144

どのパスをたどるかを決定するには、フラグメントで何をする予定かを検討する必要があります。FragmentTransaction を使用してフラグメントを非表示にした場合、ライフサイクルの実行中の状態のままである可​​能性がありますが、その UI はウィンドウから切り離されているため、表示されなくなります。したがって、技術的には引き続きフラグメントと対話し、必要に応じて後でその UI を再アタッチすることができます。フラグメントを置き換えると、実際にはコンテナーから引き出され、ライフサイクル (onPause、onStop など) のすべてのティアダウン イベントを通過します。何らかの理由でそのフラグメントが再び必要な場合は、コンテナーに挿入し、すべての初期化を再度実行します。

そのフラグメントが再び必要になる可能性が高い場合は、完全に再初期化するよりもレイアウトを再描画する方が安価な操作であるため、非表示にしてください。

于 2012-11-01T20:32:39.630 に答える
5

あなたは基本的に自分で答えました。置き換えたい場合 (古いフラグメントが不要になった場合)replace()一時的に非表示にしたい場合は を使用してから、 を実行しますhide()

于 2012-10-31T00:47:30.867 に答える