Androidアプリケーション開発—FragmentManagerがfragmentsを管理する方法


本文は主にAndroidでFragmentManagerを使用してfragmentsを管理することとFragmentManagerとfragmentの一二について述べることから抜粋した.
まずfragmentに対する自分の理解を話します.
fragmentについては、公式ドキュメントやブログが多く紹介されていますが、ここでは説明しません.androidはfragmentというコンポーネントを提供し、開発者により多くの「創造」の機会を与えているような気がします.開発者はfragmentに基づいてページの処理ロジックを作成、管理することができます.fragmentのandroidは、activityのandroidに相当し、activityはfragmentのオペレーティングシステム(コンテナ)です.
fragmentとactivityの違いは:
fragmentのライフサイクルメソッドは、オペレーティングシステムではなく管理activityによって呼び出されます.オペレーティングシステムは、ビューを管理するためにActivityが使用するfragmentを知ることができないため、fragmentの使用はActivity自身の内部で処理されます.作者:Lynhawリンク:https://www.imooc.com/article/4403出典:慕課網
FragmentManager:
Activityのfragmentsを管理するには、FragmentManagerを使用する必要があります.FragmentManager()|getSupportFragmentManager()を呼び出すことで、FragmentManagerを取得できます.
FragmentManagerのAPIはAndroid 3.0、すなわちAPIレベル11から導入されるため、以前のバージョンではsupport libraryのFragmentActivityを使用し、getSupportFragmentManager()メソッドを使用する必要がある.
Fragment Transactions:
Fragmentを使用する場合、追加、削除、置換など、ユーザインタラクションによっていくつかの動作を実行できます.これらの変更はすべて1つの集合を構成し、この集合をtransactionと呼ぶ.
    FragmentTransaction    :
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

各transactionは、同時に実行される変化のセットです.add(),remove(),replace()メソッドを用いて,必要なすべての変化を加え,commit()メソッドを呼び出し,これらの変化を適用する.commit()メソッドの前にaddToBackStack()を呼び出し、このtransactionをback stackに追加することができます.このback stackはactivityによって管理され、ユーザーが戻るキーを押すと、前のfragmentの状態に戻ります.例えば、次のコードは、前のfragmentの代わりに新しいfragmentを使用し、前回の状態をback stackに格納します.
// Create new fragment and transaction
Fragment newFragment = new ExampleFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();

// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);

// Commit the transaction
transaction.commit();

この例では、
  • newFragmentはR.id.fragment_に取って代わりますcontainerコンテナのfragmentは、ない場合は新しいfragmentを直接追加します.
  • addToBackStack()を呼び出すことにより、commit()の一連の変換がtransactionとしてback stackに格納され、ユーザはBackキーを押すことで前の変換前の状態に戻ることができる.
  • fragmentを削除すると、commit()がaddToBackStack()を呼び出さなかった場合、そのfragmentはdestroyedになります.addToBackStack()が呼び出された場合、このfragmentはstoppedになり、戻るキーで復元できます.

  • commit()メソッド:
    commit()メソッドを呼び出すとtransactionに含まれる変更動作が直ちに実行されず、commit()メソッドはtransactionをactivityのUIスレッドキューに追加する.ただし、必要であればexecutePendingTransactions()メソッドを呼び出してcommit()が提供するtransactionを直ちに実行することができます.(このtransactionが他のスレッドに依存しない限り、通常は必要ありません.)
    注意:ユーザーがactivityを離れる前にcommit()を呼び出すには、activityがそのステータスを格納し、ステータスを格納した後にcommit()を呼び出すと、例外が放出されます.これはactivityが再び復元されるとcommit以降の状態が失われるためである.紛失しても大丈夫ならcommitAllowingStateLoss()メソッドを使用します.