无ActionBar/Toolbar的导航抽屉菜单项点击事件失效求助
解决导航抽屉菜单项点击无响应的问题
我看了你的代码,问题出在DrawerLayout的子View顺序错误,这是导致菜单项点击只关闭抽屉但不触发自定义逻辑的核心原因。
问题分析
DrawerLayout有个严格的布局规则:第一个子View必须是应用的主内容区域(就是用户平时看到的主要界面),带有layout_gravity属性的抽屉布局(比如你的NavigationView)必须放在主内容区域之后。你现在把NavigationView放在了主内容RelativeLayout的前面,这会导致主内容区域直接覆盖在抽屉之上——虽然抽屉能滑出来,但菜单项的点击事件会被主内容区域拦截,系统无法正确将事件传递到你设置的NavigationView.OnNavigationItemSelectedListener中,所以只会触发抽屉关闭的默认行为,而不会执行你写的跳转、Toast等逻辑。
修复步骤
只需要调整XML布局的子View顺序,把主内容区域(id为ll_topBar的RelativeLayout)移到DrawerLayout的第一个位置,NavigationView放在后面即可:
修改后的XML代码:
<?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:id="@+id/drawer_layout" android:layout_height="match_parent" tools:context=".Activity.Dashboard"> <!-- 主内容区域:必须放在DrawerLayout的第一个位置 --> <RelativeLayout android:id="@+id/ll_topBar" android:layout_width="match_parent" android:layout_height="wrap_content"> <RelativeLayout android:id="@+id/rl_nav_drawer" android:layout_width="match_parent" android:layout_height="60dp" android:background="@color/colorPrimary" > <RelativeLayout android:id="@+id/iv_menu" android:layout_width="40dp" android:layout_height="40dp" android:layout_centerVertical="true" android:layout_marginLeft="10dp" android:layout_marginTop="5dp"> <ImageView android:layout_width="24dp" android:layout_height="24dp" android:src="@drawable/ic_menu" android:layout_centerInParent="true" /> </RelativeLayout> <RelativeLayout android:layout_width="match_parent" android:layout_height="40dp" android:background="@drawable/edittext_background" android:layout_marginRight="60dp" android:layout_marginLeft="10dp" android:layout_toRightOf="@id/iv_menu" android:layout_centerVertical="true" > <EditText android:id="@+id/et_search_school" android:layout_width="match_parent" android:layout_height="match_parent" android:hint="Search" android:padding="10dp" android:background="@color/white" android:textSize="14sp" /> <ImageView android:id="@+id/iv_search" android:layout_width="20dp" android:layout_height="20dp" android:layout_alignParentEnd="true" android:layout_centerVertical="true" android:layout_marginRight="10dp" android:background="@drawable/ic_search" android:layout_alignParentRight="true" /> </RelativeLayout> </RelativeLayout> </RelativeLayout> <!-- 抽屉布局:放在主内容区域之后 --> <android.support.design.widget.NavigationView android:id="@+id/nav_view" android:layout_width="250dp" android:layout_height="match_parent" android:layout_gravity="start" app:menu="@menu/nav_drawer_menu" app:itemTextColor="@color/colorAccent" android:background="@color/white" android:fitsSystemWindows="true" app:headerLayout="@layout/nav_header"> </android.support.design.widget.NavigationView> </android.support.v4.widget.DrawerLayout>
额外检查
- 确认你的
@menu/nav_drawer_menu布局里的菜单项id,和Java代码中switch语句的case完全匹配(比如R.id.logout、R.id.quiz)。 - 你的Java代码逻辑是正确的,不需要修改——设置监听器和处理事件的代码都没问题,只要布局顺序修复,点击事件就能正常触发。
这样调整后,导航抽屉的菜单项点击就会正确执行你写的逻辑,同时关闭抽屉啦。
内容的提问来源于stack exchange,提问作者akki_buoy
相关产品推荐
相关产品推荐

