子フラグメントで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を使うと親子関係になりこのような状況が度々起こりうる。