Mik*_*i P 5 java navigation android menuitem
正如标题所示,我正在尝试向应用程序导航抽屉中的项目添加长按功能。这些项目是动态添加的(不是从 navigation_drawer_menu.xml 膨胀的),因此我无法通过在 xml 文件中指定某些属性来解决这个问题。
我查看了 Stackoverflow 上的几个问题,特别是这个问题:How to set a long click Listener on a MenuItem (on a NavigationView)? 。我已经实现了 setActionView 解决方案,但最终在导航抽屉项的右侧边缘出现了一个空白按钮。当我长按文本时,没有任何反应。当我长按空白小按钮时,我得到了我想要的东西。
如何为整个 menuItem 设置 OnLongClickListener,而不仅仅是其右侧的(我假设它是一个按钮)?感谢您的阅读,如果需要更多信息,我很乐意为您提供帮助:)
我遇到了同样的问题,并通过深入研究 NavigationView 的视图层次结构来解决它。
第一步是了解 NavigationView 的视图层次结构。您可以使用本文中的代码片段打印出 NavigationView 的视图层次结构。
然后开始挖掘您要定位的视图。就我而言:
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
// Start digging into the view hierarchy until the correct view is found
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
ViewGroup navigationMenuView = (ViewGroup)navigationView.getChildAt(0);
ViewGroup navigationMenuItemView = (ViewGroup)navigationMenuView.getChildAt(2);
View appCompatCheckedTextView = navigationMenuItemView.getChildAt(0);
// Attach click listener
appCompatCheckedTextView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Log.i("test", "LONG CLICK");
return true;
}
});
return super.onPrepareOptionsMenu(menu);
}
Run Code Online (Sandbox Code Playgroud)