Привет, я пытаюсь использовать новые компоненты арки в моем проекте.Краткое описание того, что я хочу получить:
- Когда пользователь включен
MainFragment
Я хочу отобразить значок навигации (Гамбургер) на BottomAppBar.Пользователь может щелкнуть значок навигации и отобразить BottomNavigationDrawer
- Когда пользователь выбирает какой-либо элемент меню или щелкает что-то по
MainFragment
, он перемещается в другой фрагмент, скажем, DebtDetailsFragment
.Затем гамбургер должен быть заменен на «Стрелка назад» на NavigationController
Ниже я вставил свой код MainActivity
.Когда я комментирую строку с помощью контроллера навигации, отображается значок Гамбургера и отображается BottomNavigationDrawer
.
Но когда я раскомментирую эту строку, Гамбургер исчезает, потому что NavigationController
ничего не знает о NavigationView
, используемом вBottomNavigationDrawer
.Я не использую DrawerLayout
, поэтому контроллер считает, что гамбургер не нужен.
Метод setupWithNavController
может управлять значком гамбургера и стрелкой назад, но я должен предоставить DrawerLayout
в качестве параметра, который мне не нужениспользовать.
Документация для этого метода:
На панели инструментов также будет отображаться кнопка «Вверх», когда вы находитесь в месте без полномочий root, и значок ящика, когда вы находитесь в месте назначения root, автоматическианимация между ними.Этот метод будет вызывать [DrawerLayout.navigateUp] при нажатии на значок навигации.
Так что вопрос в том, как отобразить значок гамбургера, когда NavigationController
связан с BottomAppBar
, но без DrawerLayout
?Я обработаю гамбургер нажатием себя в методе onOptionsItemSelected
.
class MainActivity : BaseActivity() {
@Inject
lateinit var viewModelProvider: ViewModelProvider.Factory
private val viewModel: MainActivityViewModel by lazy {
ViewModelProviders.of(this, viewModelProvider).get(MainActivityViewModel::class.java)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setSupportActionBar(bottomAppBar)
val navController = findNavController(R.id.main_nav_host_fragment)
//bottomAppBar.setupWithNavController(navController)
onDestroyDisposables += viewModel.uiStateObservable
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(::render, Timber::e)
}
override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.bottomappbar_menu, menu)
return true
}
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
when (item?.itemId) {
android.R.id.home -> {
val bottomNavDrawerFragment = BottomNavigationDrawerFragment()
bottomNavDrawerFragment.show(supportFragmentManager, bottomNavDrawerFragment.tag)
}
}
return super.onOptionsItemSelected(item)
}
override fun onSupportNavigateUp(): Boolean {
return findNavController(R.id.main_nav_host_fragment).navigateUp()
}
}
Без установленного контроллера навигации:
BottomNavigationDrawer
С установленным NavigationController - невидимый гамбургер.