# これからの Fragment#onBackPressed
これからのとは言いますが(2019/09/12)現在のものです。アップデートが入るかもしれませんので...
初めに
ここで紹介するのはFragmentにおける戻るボタンイベントのベストプラクティスです。
環境
software / library | version |
---|---|
AndroidStudio | 3.5 |
Kotlin | 1.3.50 |
androidx.appcompat | 1.1.0 |
androidx.activity | 1.1.0 |
androidx.fragment | 1.2.0-alpha03 |
実践
androidx.appcompat.app.AppCompatActivity
とandroidx.fragment.app.Fragment
使ってください。
class FirsFragment: Fragment() {
override fun onAttach(context: Context) {
super.onAttach(context)
requireActivity().onBackPressedDispatcher.addCallback(owner = this, enabled = true) {
// 何か処理
}
}
}
解説
簡単に解説すると、Activity
のBackPressedDispatcher
にOnBackPressedCallback
を追加します。
引数のowner
はFragmentのLifecyleを監視して自動で開放するためのものです。
enabled
は戻るボタンを押したときに他に伝播するかしないかです。
コールバック内で伝播するかしないかを決めたけば、isEnabled
を使用すると良いです。
例えば、ViewPagerで最初のページの時だけ今のFragmentを終了する
であれば、
addCallback(this) {
// viewModel.isFirstPageでViewPagerが最初のペーかどうか判定する帰り値はBoolean
isEnabled = viewModel.isFirstPage
}
です。
ちなみに、引数enabled
はデフォでtrue
なので、省略できます。
おわり
前までのFragment
にリスナーを実装してActivivy
から呼び出すとか、
View
にOnKeyListener
をセットしてゴニョゴニョするめんどい実装がなくなっていい感じになりました。