Navigation Drawer图标不显示、点击事件无响应问题求助
我来帮你一步步排查并解决这两个问题:
一、修复Drawer图标不显示的问题
你的代码里已经初始化了ActionBarDrawerToggle,但缺少了和ActionBar的绑定以及菜单事件处理,导致图标不显示且点击左上角无法打开Drawer:
- 启用ActionBar的Home按钮
在onCreate方法中,初始化完actionBarDrawerToggle后添加以下代码:
getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true);
- 让Toggle处理菜单点击事件
修改onOptionsItemSelected方法,优先让ActionBarDrawerToggle处理点击,这样点击左上角图标就能打开/关闭Drawer:
@Override public boolean onOptionsItemSelected(MenuItem item) { // 先处理DrawerToggle的点击事件 if (actionBarDrawerToggle.onOptionsItemSelected(item)) { return true; } int id = item.getItemId(); if (id == R.id.menuShare){ Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND); sharingIntent.setType("text/plain"); String shareBody = "Hey,Install this App and Play Dream 11 with pr"; startActivity(Intent.createChooser(sharingIntent,"Share via")); } return super.onOptionsItemSelected(item); }
二、修复NavigationView菜单项点击无响应的问题
主要有两个原因导致点击没反应,我们逐一解决:
- 修改事件处理的返回值
你的onNavigationItemSelected方法最后返回false,这会告诉系统该事件未被处理,同时不会标记菜单项为选中状态。需要改成return true,并且点击后关闭Drawer:
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { int id = item.getItemId(); if (id == R.id.nav_home_news){ Toast.makeText(LauncherActivity.this,"News",Toast.LENGTH_SHORT).show(); } else if (id == R.id.nav_home_schedule){ Toast.makeText(LauncherActivity.this,"Schedule",Toast.LENGTH_SHORT).show(); } else if (id == R.id.nav_home_upcoming_series){ Toast.makeText(LauncherActivity.this,"Series",Toast.LENGTH_SHORT).show(); } else if (id == R.id.nav_home_ranking){ Toast.makeText(LauncherActivity.this,"Ranking",Toast.LENGTH_SHORT).show(); } else if (id == R.id.nav_home_point_table){ Intent intent = new Intent(LauncherActivity.this,KKRActivity.class); startActivity(intent); } // 点击菜单项后关闭Drawer drawerLayout.closeDrawers(); // 返回true表示事件已被处理 return true; } });
- 检查布局层级是否正确
确保你的NavigationView是DrawerLayout的直接子View,且没有被其他View(比如BottomNavigationView)遮挡。正确的布局结构应该是这样的:
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/nav_drawer_home" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- 主内容区域 --> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <!-- Toolbar(如果使用自定义Toolbar替代ActionBar) --> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary"/> <!-- Fragment容器 --> <FrameLayout android:id="@+id/fragment_container" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"/> <!-- BottomNavigationView --> <android.support.design.widget.BottomNavigationView android:id="@+id/bottom_navigation" android:layout_width="match_parent" android:layout_height="wrap_content" app:menu="@menu/bottom_nav_menu"/> </LinearLayout> <!-- NavigationView 必须是DrawerLayout的直接子View,并且设置layout_gravity="start" --> <android.support.design.widget.NavigationView android:id="@+id/navigationViewHome" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" app:menu="@menu/drawer_menu"/> </android.support.v4.widget.DrawerLayout>
完成以上修改后,你的Navigation Drawer应该就能正常显示图标,并且菜单项点击也会有响应了。
内容的提问来源于stack exchange,提问作者Badal Kumar
相关产品推荐
相关产品推荐

