LoginSignup
3
2

More than 1 year has passed since last update.

FragmentContainerViewを使用した際の、ActivityでのNavigationComponentの書き方

Posted at

はじめに

今まで、フラグメントを使う際に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を用いて、Activityfragmentの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を取得しています。

微妙な違いなんですが、これができてないとエラーが起きてビルドできないので注意してください、、、、、、、

3
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2