はじめに
今まで、フラグメントを使う際にActivity
で、fragment
を使用していたのですが、FragmentContainerView
の方がFragmentに適したContainerの仕組みが提供されているらしくパフォーマンスが高いらしいと言うことを知ったので、FragmentContainerView
を使い始めたのですが、その時に、Activity
でのNavigation
の記述の仕方が少し変わっていて、そこで少しハマったのでその解決方法を残しておきます。
両者の違い
fragmentを使用した場合
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val navController = Navigation.findNavController(this, R.id.activity_main_nav_host_fragment)
val bottomNavigationView = findViewById<BottomNavigationView>(R.id.activity_main_bottom_navigation_view)
NavigationUI.setupWithNavController(bottomNavigationView, navController)
}
fragment
を使用した場合は、findNavController
を用いて、Activity
のfragment
のidを取得しています。
FragmentContainerViewを使用した場合
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val navController = supportFragmentManager.findFragmentById(R.id.activity_main_nav_host)
val bottomNavigationView = findViewById<BottomNavigationView>(R.id.activity_main_bottom_navigation_view)
NavigationUI.setupWithNavController(bottomNavigationView, navController!!.findNavController())
}
}
FragmentContainerView
を使用した場合は、findFragmentById
を用いて、Activity
にあるidを取得しています。
微妙な違いなんですが、これができてないとエラーが起きてビルドできないので注意してください、、、、、、、