【发布时间】:2021-06-23 17:06:21
【问题描述】:
您好,我正在尝试在我的项目中使用新的 Arch 组件。简短描述我想要实现的目标:
- 当用户使用
MainFragment时,我想在BottomAppBar 上显示导航图标(汉堡)。用户可以点击导航图标并显示BottomNavigationDrawer - 当用户选择某个菜单项,或单击
MainFragment上的某些内容时,他会移动到另一个片段,比如DebtDetailsFragment。然后汉堡包应该被NavigationController替换为“后退箭头”
我在下面粘贴了我的MainActivity 代码。当我使用导航控制器注释行时,汉堡图标可见并且BottomNavigationDrawer 能够显示。
但是当我取消注释这一行时,汉堡包消失了,因为NavigationController 对BottomNavigationDrawer 中使用的NavigationView 一无所知。我不使用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 - 汉堡不可见。
【问题讨论】:
标签: android kotlin android-architecture-components android-architecture-navigation