目的
Androidアプリのアプリバー(アクションバー)に戻るボタンを表示させて、前の画面に戻る処理のメモ
Fragmentの時を想定。
環境
- Android Studio 4.1.1
- Kotlin 1.4.32
参照サイト
Qiita FragmentでActionBarを指定したい!
Fragmentだと設定を1つ追加する必要があり、上記サイトを参照に設定した。
対応メモ
遷移元のFragmentは以下としました。
遷移先から戻ってきた時に戻るボタンが表示されたままなので、ボタンを表示にする設定をしています。
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// fragmentでアクションバー共有している場合は必要。activityだと不要な時もあり
(activity as AppCompatActivity).supportActionBar?.setDisplayHomeAsUpEnabled(false)
(activity as AppCompatActivity).supportActionBar?.setHomeButtonEnabled(false)
....
}
遷移先のFragmentは以下としました。
import android.view.MenuItem
....
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// アクションバー戻るボタン表示
(activity as AppCompatActivity).supportActionBar?.setDisplayHomeAsUpEnabled(true)
(activity as AppCompatActivity).supportActionBar?.setHomeButtonEnabled(true)
// Fragmentの場合はこの設定を行わないと、戻るボタンを押しても挙動しない。
// activityでは不要と考える
setHasOptionsMenu(true)
...
}
...
// 戻るボタンタップ時の挙動
// findNavController().navigate(R.id.action_SecondFragment_to_FirstFragment)はアプリテンプレの処理をそのまま流用
override fun onOptionsItemSelected(item: MenuItem): Boolean {
val id = item.itemId
var result = false
if (id == android.R.id.home) {
findNavController().navigate(R.id.action_SecondFragment_to_FirstFragment)
} else {
result = super.onOptionsItemSelected(item)
}
return result
}
実際の挙動
動きとしては以下です。