如何解决Android ReselectedListener用于NavigationView
在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中实现了Listener并从那里添加了它,不需要额外的类)
但是,当我按“后退”按钮时,由于菜单项未在onBackPressed()
上更新,因此我将能够按当前目的地的菜单按钮。
更新2
navController.addOnDestinationChangedListener(new NavController.OnDestinationChangedListener() {
@Override
public void onDestinationChanged(@NonNull NavController controller,@NonNull NavDestination destination,@Nullable Bundle arguments) {
currentMenuItemId = destination.getId();
}
});
这解决了!
解决方法
也许你可以这样做(我很快就做到了,也许会更好!)
class ReSelectedListener(val navigationViewCallBack: NavigationViewCallBack) : NavigationView.OnNavigationItemSelectedListener {
var newItemSelected : MenuItem? = null
override fun onNavigationItemSelected(item: MenuItem): Boolean {
if(newItemSelected != null){
if(newItemSelected!!.itemId == item.itemId){
navigationViewCallBack.setOnNavigationItemReselectedListener(item)
}
}
newItemSelected = item
return true
}
}
interface NavigationViewCallBack {
fun setOnNavigationItemReselectedListener(item: MenuItem)
}
之后
class YourFragment :Fragment(),NavigationViewCallBack
和
navigationView.setNavigationItemSelectedListener(ReSelectedListener(this))
并在YourFragment中实现回调方法:
override fun setOnNavigationItemReselectedListener(item: MenuItem) {
TODO("Not yet implemented")
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。