LoginSignup
3
2

More than 5 years have passed since last update.

Navigation LibraryでBottomNavigationの初期位置を変更する

Last updated at Posted at 2019-01-12

DeepLinkなどから遷移してBottomNavigationの初期位置を変更する時の実装メモです。

navController.navigate()でnavigationのidを指定して実装しようとしたところ、バックスタックが積まれて端末のバックボタンを押した時に元のタブ位置に一度戻るという挙動になってしまったので少し工夫しました。

navigation/navigation.xml
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    app:startDestination="@+id/home">

    <fragment
        android:id="@+id/home"
        android:name="com.konifar.HomeFragment"
        android:label="@string/home_title"
        tools:layout="@layout/home_fragment">
        <action
            android:id="@+id/action_to_favorite"
            app:destination="@id/favorite" />
        <action
            android:id="@+id/action_to_account"
            app:destination="@id/account" />
    </fragment>

    <fragment
        android:id="@+id/favorite"
        android:name="com.konifar.FavoriteFragment"
        android:label="@string/favorite_title"
        tools:layout="@layout/favorite_fragment" />

    <fragment
        android:id="@+id/account"
        android:name="com.konifar.AccountFragment"
        android:label="@string/account_title"
        tools:layout="@layout/account_fragment" />
</navigation>
MainActivity.kt
private fun setUpBottomNavigation() {
    val host = supportFragmentManager
        .findFragmentById(R.id.nav_host_fragment) as NavHostFragment? ?: return

    // 2つめのお気に入りタブを初期位置にする
    val navOptions = NavOptions.Builder()
        .setPopUpTo(R.id.home, true)
        .build()
    // ここで R.id.favorite ではなく R.id.action_to_favorite を指定する
    host.navController.navigate(R.id.action_to_favorite, null, navOptions)
    binding.navigation.setupWithNavController(host.navController)
}

詳しい説明はまだNavigationのコードを読めていないので読んでから書きます。

以上。

3
2
0

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