Android開発

【Android開発】ネストされたフラグメント間でやりとり

子フラグメントでcontextを取得したい

フラグメントのListener/Callback設定をする際はonAttach内にて行う。

APIレベル23以降ではonAttach(Activity activity)がonAttach(Context context)に変わり、オーバーライドしてListener/Callback設定をする

ただし、ネストされた子フラグメント側でListener/Callback設定を行おうとしたときにcontextを取得しようとするとうまくいかない。

親フラグメントのライフサイクルでのonAttach時に子フラグメントが実装されていないために、contextに子フラグメントの参照ができないことが原因と考えられる。

よってListener/Callbackがうまく働かなくなってしまう。

そこで用いられるのが、getChildFragment()/getParentFragment()だ。

名前通り、子フラグメントor親フラグメントを読んで動的に参照することができる。

使用例は以下の通り。

override fun onAttach(context: Context) {
   super.onAttach(context)
   // APILevel23からは引数がActivity->Contextになっているので注意する

   if (parentFragment is dialogDismissListener) {
       // リスナーをここでセットするようにします
       mListener = parentFragment as dialogDismissListener
   }
}

DialogFragmentを使用する際に、fragmentを使うと親子関係になりこのような状況が度々起こりうる。

-Android開発

© 2020 ガジェジー