Привет, я пытаюсь использовать новые компоненты арки в своем проекте. Краткое описание чего я хочу добиться:
- Когда пользователь находится на
MainFragment
, я хочу отобразить значок навигации (гамбургер) на BottomAppBar. Пользователь может щелкнуть значок навигации и отобразитьBottomNavigationDrawer
- Когда пользователь выбирает какой-либо пункт меню или нажимает что-то на
MainFragment
, он перемещается в другой фрагмент, скажем,DebtDetailsFragment
. Затем гамбургер следует заменить на «стрелку назад» наNavigationController
.
Ниже я вставил свой код MainActivity
. Когда я комментирую строку с помощью навигационного контроллера, отображается значок гамбургера, и может отображаться BottomNavigationDrawer
.
Но когда я раскомментирую эту строку, гамбургер исчезнет, потому что NavigationController
ничего не знает о NavigationView
, используемом в BottomNavigationDrawer
. Я не использую DrawerLayout
, поэтому диспетчер считает, что гамбургер не нужен.
Метод setupWithNavController
может управлять значком гамбургера и стрелкой назад, но я должен указать DrawerLayout
в качестве параметра, который я не использую.
Документация для этого метода:
На панели инструментов также будет отображаться кнопка «Вверх», когда вы находитесь в некорневом месте назначения, и значок ящика, когда вы находитесь в корневом месте назначения, автоматически анимируясь между ними. Этот метод будет вызывать [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()
}
}
Без установленного навигационного контроллера:
НижняяНавигацияЯщик
С установленным NavigationController - Гамбургер невидим.