Я разрабатываю приложение в Kotlin, используя некоторые из последних компонентов Android Jetepack. У меня недавно была небольшая заминка со следующим случаем:
Эта проблема, кажется, возникает при использовании BottomNavigationView
с NavController
, и когда каждый Fragment
имеет свой собственный Toolbar
. Проблема заключается в том, что при переходе от фрагмента A к фрагменту B изменения в заголовках и значках навигации ActionBar обновляются во фрагменте A и B. В идеале дляпри плавном переходе состояние AppBar во фрагменте A не изменится. У меня есть подозрение, что это может быть связано с тем фактом, что эти свойства не «принадлежат» Toolbar
, поскольку это, похоже, не влияет наПункты меню панели инструментов аналогичным образом.
Обходной путь для заголовков AppBar - установка свойства заголовка каждой панели инструментов в соответствующем фрагменте_layout.xml, а также удаление свойства метки из navFragment.xml (которыйобычно отвечает за установку текста заголовка панели приложений при использовании navController).
Однако , это не решает проблему значков навигации ActionBar, таких как кнопка «Вверх» / «Домой», которые не появляются в пунктах назначения верхнего уровня, но появляются в других. И поэтому в моем случае это все еще выглядит довольно дерзко.
Я настроил навигацию следующим образом:
MainActivity.kt
class MainActivity : AppCompatActivity() {
lateinit var appBarConfiguration: AppBarConfiguration
lateinit var navController: NavController
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding: MainActivityBinding = DataBindingUtil.setContentView(this, R.layout.main_activity)
navController = Navigation.findNavController(this, R.id.nav_fragment)
appBarConfiguration = AppBarConfiguration(setOf(R.id.fragment_1_main, R.id.fragment_2_main))
binding.bottomNavigationView.setupWithNavController(navController)
}
}
override fun onSupportNavigateUp(): Boolean {
return navController.navigateUp(appBarConfiguration) || super.onSupportNavigateUp()
}
}
ExampleFragment.kt
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
(activity as AppCompatActivity).setSupportActionBar(toolbar)
NavigationUI.setupWithNavController(toolbar, (requireActivity() as MainActivity).navController, (requireActivity() as MainActivity).appBarConfiguration)
}
Halp!