私のプログラムには、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();
}