📱

[Android]Navigation + Toolbarで戻るボタンを実装したい

2022/06/13に公開

前提

  • jetpackのnavigationの遷移の仕方を理解していること
  • navigationの遷移の紐付け部分は割愛
  • レイアウトにtoolbarを設定し、themeのparentをNoactionbarに設定していること
  • 画面はFirstFragment.ktとSecondFragment.ktの二種類用意し、FirstFragmentからSecondFragmentへ遷移する簡単な構成

手順

  • setSupportActionBarでtoolbarをアクションバーとして使えるようにする
  • findNavControllerの引数に遷移する枠のidを指定
  • appBarConfigurationは戻るボタンの表示、非表示をなんやかんや上手くやってくれるもの
  • setupActionBarWithNavControllerの引数に上記2つを入れてやることで戻るボタンが表示されるようになる
  • onSupportNavigateUpをオーバーライドすることでようやく戻るボタン押下時に前の画面に戻れるようになる
MainActivity.kt
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        setSupportActionBar(findViewById(R.id.toolbar))

        val navController = findNavController(R.id.myNavHostFragment)
        val appBarConfiguration = AppBarConfiguration(navController.graph)
        setupActionBarWithNavController(navController, appBarConfiguration)

    }

    override fun onSupportNavigateUp(): Boolean {
        return findNavController(R.id.myNavHostFragment).navigateUp()
    }
}

ちなみにappBarConfigurationとsetupActionBarWithNavControllerを使用しなくても

NavigationUI.setupActionBarWithNavController(this, navController)

でも戻るボタンを実装できる

Discussion