これらの機能とその目的が非常に混同されています。 replace()
を使用すると、既存のフラグメントが新しいフラグメントに置き換えられることがわかりました。 addToBackStack(null)
を使用してそのフラグメントをバックスタックに配置して、前に示したフラグメントに戻ることができます。フラグメントが追加(または置換)されたとき-onAttach()
-> onCreate()
など...フラグメントのメソッドは順番に呼び出されます。
アクティビティのフラグメントでremove()
を呼び出すと、フラグメントのどの関数がどの順序で呼び出されますか?
attach()
およびdetach()
は何をしますか? detach()
はフラグメントを削除しますか?そして、これらの2つのattach()
とdetach()
が使用されると、フラグメントのどの関数が呼び出され、どの順序で?
また、popBackStack()
で何が起こりますか?アクティビティのフラグメントでpopBackStack()
を使用すると、どの関数が呼び出されるのですか??
そして、onDestroy()はいつ呼び出されますか??
ありがとうございました。
アクティビティからフラグメントに対してremove()を呼び出すと、フラグメントのどの関数がどの順序で呼び出されますか?
http://developer.Android.com/reference/Android/app/Fragment.html を見てください。
順序は次のとおりです。onPause()
、onStop()
、onDestroyView()
、onDestroy()
、onDetach()
Attach()およびdetach()は何をしますか? detach()はフラグメントを削除しますか?そして、これらの2つのattach()とdetach()が使用されると、フラグメントのどの関数が呼び出され、どの順序で??
attach()
およびdetach()
は、それぞれFragment
をActivity
に関連付けまたはデタッチします。 Fragment
をアタッチするとonAttach()
ライフサイクルメソッドが呼び出され、デタッチするとonDetach()
ライフサイクルメソッドがFragment
で呼び出されます。詳細については、上記のリンクをご覧ください。
また、popBackStack()はどうなりますか??つまり、アクティビティのフラグメントでpopBackStack()を使用すると、どの関数が呼び出されますか?
Fragment
が破壊されていない場合、popBackStack()
でonStart()
およびonResume()
メソッドが呼び出されます。 Fragment
が以前に破棄されている場合、ライフサイクルメソッドはonAttach()
から呼び出されます。 Activities
の戻るボタンを押したときと同じです。
popBackStack()
に注意してください。フラグメントをポップするのではなく、フラグメントトランザクションをポップします。したがって、最後のフラグメントトランザクションが反転されます。 FragmentA
を表示していて、トランザクションが次の場合:
fragmentTransaction.replace(R.id.your_layout, fragmentB);
fragmentTransaction.addToBackStack(null);
FragmentA
をFragmentB
に置き換え、そのトランザクション(フラグメントではなく)をバックスタックに追加します。次に、戻るボタンを押すと、バックスタックがポップされ、トランザクションが取得されます。これは、「このFragmentA
をFragmentB
に置き換え」でした。次に、そのトランザクションを逆にします。後方では、現在のフラグメントがFragmentA
に置き換えられます。元のFragmentA
がまだ存在する場合、それを使用します。破壊された場合、新しいものを作成します。
次の手順で、フラグメントAとフラグメントBがコンテナに追加されたとします。
1. Added fragment A => .replace(R.id.container, fragmentA) => addToBackStack(null)
2. Added fragment B => .replace(R.id.container, fragmentB) => addToBackStack(null)
3. Removed fragment B => fragmentManager.popBackStack();
Fm.popBackStack()が呼び出されたときのコールバック:
FragmentB: onPause()
FragmentB: onStop()
FragmentB: onDestroy()
FragmentB: onDetach()
FragmentA: onCreateView()
FragmentA: onViewCreated()
FragmentA: onActivityCreated()
FragmentA: onStart()
FragmentA: onResume()
説明:popBackStack()を使用してフラグメントBを削除および破棄しているときに、フラグメントAビューが再び作成されて再開されたのはなぜですか?
回答:フラグメントBを追加したときに、replace()とaddToBackStack()を使用したため、すべてのフラグメントがコンテナから削除され、フラグメントBがコンテナに追加されました。また、このトランザクションはバックスタックに記録されました。したがって、fm.popBackStack()が呼び出されると、最初にトランザクションがバックスタックからポップアウトされるため、操作自体が元に戻ります。したがって、フラグメントbはコンテナから削除され、破棄されます。そして、他のすべてのフラグメントが追加されます。この場合、フラグメントAのビューがコンテナに追加されます。また、フラグメントAのonAttach&onCreate()は、すでに作成されてMainActivityにアタッチされているため、呼び出されないことにも注意してください。
フラグメントBのバックプレスは同じことを行います。
If you press the back button, it calls fm.popBackStack() and pops the transaction.