[英]Android BottomNavigationView with Navigation Component issue
[英]android navigation component bottomnavigationview intercept click
我有一个底部导航视图,它使用setupWithNavController()与导航组件链接。 它按您的预期工作,按菜单项会将我移动到所需的窗口。
问题是,在重定向到不同的屏幕之前,我需要检查用户是否登录,并根据这一点,我需要重定向到不同的屏幕。
到目前为止,我似乎可以在我的底部导航视图上使用setOnNavigationItemSelectedListener() ,但随后我失去了setupWithNavController() 的所有便利,因为我必须手动指定我想去的所有目的地。
有没有更好的方法来实现这一点?
编辑:我的登录屏幕实际上是透明的,所以转到所需的片段然后在顶部显示登录屏幕可能会很棘手
问题是,在重定向到其他屏幕之前,我需要检查用户是否已登录,并且根据这一点,我需要重定向到其他屏幕。
在这种情况下,您可以像这样使用OnDestinationChangedListener
:
navController.addOnDestinationChangedListener { controller, destination, arguments ->
if(destination.id == R.id.nav_profile && !isLoggedIn()){
//Immediately pop the fragment
controller.popBackStack()
//Navigate to the login fragment
controller.navigate(R.id.nav_login)
}
}
在这里,所需的片段从后堆栈中删除。 这样,您就不必担心登录屏幕的透明背景。 此外,您不会失去setupWithNavController()
任何便利
但是,您应该确保方法isLoggedIn()
足够快。 否则,用户可能会在从返回堆栈中删除之前看到 require 函数。
bottomNav.setOnNavigationItemSelectedListener {
if (//not login) {
//to login fragment
false
} else {
NavigationUI.onNavDestinationSelected(it, homeController)
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.