フラグメントトランザクション
用語から解説していきます。
フラグメントとは、簡単にいうと、コンテンツとライフサイクルを持ったビューです。
トランザクションとは、複数の処理を1セットとする考え方です。よくある例が、口座の振り込み処理。「Aが払う、Bがもらう」で1セットの考え方。
フラグメントの追加、削除では、データベースへのデータの追加、削除と似たフラグメントトランザクション
という考え方をします。
同一アクティビティ上に、フラグメントが存在し得る時などに必要となってきます。
例えば、左半分にリストデータがあり、右半分にリストデータをタップした時に表示されるフラグメントがある時などです。
使い方手順
1,FragmentTransactionオブジェクトを取得
2,対象Fragmentオブジェクトを生成、もしくは取得する。
3,フラグメントの追加/削除/置き換え処理を行う
4,コミットする
1,FragmentTransactionオブジェクトを取得
FragmentTransaction
とは、一連のフラグメント操作を実行するためのAPI。参考
フラグメントトランザクションを制御するクラスです。参考
FragmentManager
クラスのbeginTransaction
メソッドで取得します。その際にセーフコール関数を忘れない。
FragmentManager
:Fragment内部のオブジェクトと対話するためのインターフェースActivity
beginTransaction
:このFragmentManagerに関連付けられているフラグメントで一連の編集操作を開始します。
val transaction = fragmentManager?.beginTransaction()
2,対象Fragmentオブジェクトを生成、もしくは取得する。
対象のFragmentオブジェクトを生成します。
または、今あるフラグメントの場合は、findFragmentById()
を使用するなどして、Fragmentオブジェクトを取得します。
val 生成したいフラグメントに代入される変数 = 生成したいフラグメント()
3,フラグメントの追加/削除/置き換え処理を行う
1で出てきた、FragmentTransaction
クラスのメソッドを使用します。
その際、サーフコール演算子を忘れないようにします。
FragmentTransactionクラスのメソッド一部
メソッド | 役割 | 引数の中身 |
---|---|---|
add(fragment: Fragment!, tag: String!) | 追加 | 1つ目は、追加先のレイアウト画面部品のR値/2つ目は、追加するFragmentオブジェクト |
remove(fragment: Fragment!) | 削除 | 削除するFragmentオブジェクト |
replace(containerViewId: Int, fragment: Fragment!) | 削除と同時に追加 | 1つ目は、追加先のレイアウト画面部品のR値/2つ目は、追加するFragmentオブジェクト |
transaction?.replace(R.id.レイアウト画面部品, 追加するFragment)
transaction?.remove(削除するFragment)
指定するFragmentオブジェクトの前にthis@自身のFragmentオブジェクト
とすると、自身のインスタンスを表すことができます。
4,コミットする
1で出てきた、FragmentTransaction
クラスのcommit()
メソッドを使用します。
フラグメント処理は、トランザクションという考え方を採用しているので、commit()メソッドが実行されるまで、フラグメントの状態は反映されません。
transaction?.commit()