0
0

More than 3 years have passed since last update.

Androidアプリにおける フラグメントトランザクション

Last updated at Posted at 2021-06-22

フラグメントトランザクション

用語から解説していきます。

フラグメントとは、簡単にいうと、コンテンツとライフサイクルを持ったビューです。
トランザクションとは、複数の処理を1セットとする考え方です。よくある例が、口座の振り込み処理。「Aが払う、Bがもらう」で1セットの考え方。

フラグメントの追加、削除では、データベースへのデータの追加、削除と似たフラグメントトランザクションという考え方をします。

同一アクティビティ上に、フラグメントが存在し得る時などに必要となってきます。
例えば、左半分にリストデータがあり、右半分にリストデータをタップした時に表示されるフラグメントがある時などです。

使い方手順

1,FragmentTransactionオブジェクトを取得
2,対象Fragmentオブジェクトを生成、もしくは取得する。
3,フラグメントの追加/削除/置き換え処理を行う
4,コミットする

1,FragmentTransactionオブジェクトを取得

FragmentTransactionとは、一連のフラグメント操作を実行するためのAPI。参考
フラグメントトランザクションを制御するクラスです。参考
FragmentManagerクラスのbeginTransactionメソッドで取得します。その際にセーフコール関数を忘れない。

FragmentManager:Fragment内部のオブジェクトと対話するためのインターフェースActivity
beginTransaction:このFragmentManagerに関連付けられているフラグメントで一連の編集操作を開始します。

SampleFragment.kt
val transaction = fragmentManager?.beginTransaction()

2,対象Fragmentオブジェクトを生成、もしくは取得する。

対象のFragmentオブジェクトを生成します。
または、今あるフラグメントの場合は、findFragmentById()を使用するなどして、Fragmentオブジェクトを取得します。

SampleFragment.kt
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オブジェクト
SampleFragment.kt
transaction?.replace(R.id.レイアウト画面部品, 追加するFragment)
transaction?.remove(削除するFragment)

指定するFragmentオブジェクトの前にthis@自身のFragmentオブジェクトとすると、自身のインスタンスを表すことができます。

4,コミットする

1で出てきた、FragmentTransactionクラスのcommit()メソッドを使用します。

フラグメント処理は、トランザクションという考え方を採用しているので、commit()メソッドが実行されるまで、フラグメントの状態は反映されません。

SampleFragment.kt
transaction?.commit()
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0