Проблемы с анимацией при использовании BottomNavigationView с NavController, и каждый фрагмент имеет свою собственную панель инструментов - PullRequest
0 голосов
/ 10 ноября 2019

Я разрабатываю приложение в 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!

...