はじめに
今まで、フラグメントを使う際に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を取得しています。
微妙な違いなんですが、これができてないとエラーが起きてビルドできないので注意してください、、、、、、、