【发布时间】:2020-11-06 09:10:53
【问题描述】:
在BottomNavigationView 中可以设置:
bottomNavigationView.setOnNavigationItemReselectedListener(item -> {
// do nothing on reselection
});
但是对于NavigationView,这是不可用的。什么是好的等价物?
更新
感谢 @ande 我实现了以下功能:
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
if (currentMenuItemId == item.getItemId()) {
navDrawer.close();
return true;
}
currentMenuItemId = item.getItemId();
NavigationUI.onNavDestinationSelected(item, navController);
navDrawer.close();
return true;
}
如果我只通过菜单项导航,那效果很好。 (顺便说一句,我刚刚在我的 Activity 中实现了监听器并从那里添加了它,不需要额外的类)
但是,当我按下后退按钮时,我将能够按下当前目的地的菜单按钮,因为菜单项在 onBackPressed() 上没有更新。
更新 2
navController.addOnDestinationChangedListener(new NavController.OnDestinationChangedListener() {
@Override
public void onDestinationChanged(@NonNull NavController controller, @NonNull NavDestination destination, @Nullable Bundle arguments) {
currentMenuItemId = destination.getId();
}
});
这就解决了!
【问题讨论】:
-
为什么你说
NavigationView没有setOnNavigationItemReselectedListener?;如果我没有得到任何东西,请纠正我 -
@Zain 您的链接指向
setNavigationItemSelectedListener,而不是选择RE。按照我的两个链接,你会看到缺少的界面 -
@Zain 你有什么建议吗?
-
你在使用导航控制器吗?
-
@TahaMalik 是的,我愿意
标签: android navigation-drawer android-navigation android-navigationview android-bottomnavigationview