21

私のプログラムには、Fragment1、Fragment2、....->Fragment6 の 6 つのフラグメントがあります。

add() および replace() ステートメントを使用してフラグメントを切り替え、ライフサイクルを追跡します。

Fragment1を追加Fragment2を追加Fragment3を追加Fragment4を追加Fragment5を追加Fragment6を置換

ライフサイクルを示す log-cat (追跡用に onCreate、onCreateView、onDestroyView、onDestroy にいくつかの printf ポイントがあります)


鬼ごっこ __ _ __ _ _ __ _ __ テキスト_

Fragment1_ _ _ _ ___ _onCreate

Fragment1_ _ _ _ ___ _onCreateView

フラグメント1_ _ _ _ ___ _フラグメント 2 を追加

Fragment2_ _ _ _ ___ _onCreate

Fragment2_ _ _ _ ___ _onCreateView

フラグメント2_ _ _ _ ___ _フラグメント 3 を追加

Fragment3_ _ _ _ ___ _onCreate

Fragment3_ _ _ _ ___ _onCreateView

フラグメント3_ _ _ _ ___ _フラグメント 4 を追加

Fragment4_ _ _ _ ___ _onCreate

Fragment4_ _ _ _ ___ _onCreateView

フラグメント4_ _ _ _ ___ _フラグメント5を追加

Fragment5_ _ _ _ ___ _onCreate

Fragment5_ _ _ _ ___ _onCreateView

フラグメント5 __ _ __ _ _ Fragment6 を置き換えます

フラグメント1 __ _ __ _ _ onDestroyView

フラグメント3 __ _ __ _ _ onDestroyView

フラグメント5 __ _ __ _ _ onDestroyView

Fragment6_ _ _ _ ___ _onCreate

Fragment6_ _ _ _ ___ _onCreateView


私の質問:

Fragment5 が Fragment6 に置き換えられた後、 Fragment1 & 3 & 5 のビューが破棄されるのはなぜですか?

Fragment2 & 4 で何が起こっていますか?

Fragment2 & 4 が Fragment1 & 3 &5 としてのビューを破棄しないのはなぜですか?

add() および replace() メソッドを呼び出すときのフラグメントのライフサイクルについて完全に理解するのを手伝ってください。


addFragment および replaceFragment メソッドを更新します。

public void addFragment(Fragment fromFragment, Fragment toFragment) {
    FragmentManager manager = getFragmentManager();
    FragmentTransaction transaction = manager.beginTransaction();
    transaction.add(R.id.container,toFragment, toFragment.getClass().getName());
    transaction.hide(fromFragment);
    transaction.addToBackStack(toFragment.getClass().getName());
    transaction.commit();
}

public void replaceFragment(Fragment fromFragment, Fragment toFragment) {
    FragmentManager manager = getFragmentManager();
    FragmentTransaction transaction = manager.beginTransaction();
    transaction.replace(R.id.container,toFragment, toFragment.getClass().getName());
    transaction.hide(fromFragment);
    transaction.addToBackStack(toFragment.getClass().getName());
    transaction.commit();
}
4

2 に答える 2

5

ViewGroup R.id.container置換すると、すべてのフラグメント (1,2,3,4,5) が新しいFragment(6)に交換されます。フラグメントが削除されると、それらは破棄されます。破棄されると、onDestroyView()メソッドが呼び出されます。

FragmentTransaction の置換

2 と 4 の質問については、よくわかりません。logcat に書き出すコードをもっと投稿できますか?

于 2013-11-17T18:52:13.360 に答える