Первый фрагмент в Navigation всегда вызывается два раза на Android 10
Есть вот такой вот BottomNavigationView в разметке:
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/nav_view"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="0dp"
android:layout_marginEnd="0dp"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:background="@color/bkg_bottom_bar"
app:itemIconTint="@color/mwhite"
app:itemTextColor="@color/mwhite"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:menu="@menu/bottom_nav_menu"
app:labelVisibilityMode="selected"
/>
<fragment
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="56dp"
app:defaultNavHost="true"
app:layout_constraintBottom_toTopOf="@id/nav_view"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="1.0"
/>
То есть внизу вкладки при нажатии на них меняются фрагменты в MainActivity присваиваю NavGraph:
navController.setGraph(R.navigation.mobile_navigation)
navView.setupWithNavController(navController)
Все как положено первым у меня заставка SplashFragment идет он указан в R.navigation.mobile_navigation, но какой бы фрагмент не был указан в app:startDestination в файле mobile_navigation он стабильно вызывается 2 раза. Если еще в разметке указать Graph то 4 раза. Почему не пойму. Можно ли это как то решить без костыля в первом фрагменте? Тут новая информация Похоже срабатывает два раза только на android 10 На Android 8.1, 6, 5.1 сработало 1 раз. Буду еще тестировать.
Ответы (1 шт):
Не знаю поможет или нет, но вот так работает без проблем:
В разметке добавить:
<fragment
...
app:navGraph = "@navigation/mobile_navigation"
/>
Потом в Activity где инициализируете NavController :
class MainActivity : AppCompatActivity() {
lateinit var bottomNavigationView: BottomNavigationView
lateinit var navController : NavController
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
navController = Navigation.findNavController(this,
R.id.nav_host_fragment)
bottomNavigationView = findViewById(R.id.nav_view)
NavigationUI.setupWithNavController(
bottomNavigationView,
navController
)