点击汉堡图标时NavigationDrawer无法打开,onOptionsItemSelected无效
我仔细看了你的代码,发现几个关键问题导致汉堡图标点击后NavigationDrawer没反应,咱们逐个修复:
1. Toolbar ID不匹配
你在Java代码里查找的Toolbar ID是R.id.toolbar1,但XML布局里Toolbar的实际ID是@+id/tool_bar,这直接导致toolbar变量为空,后续的ActionBar配置完全没生效。
2. NavigationView布局结构错误
DrawerLayout的规范是必须有两个直接子View:一个是主内容区域,另一个是侧边栏(NavigationView)。你现在把NavigationView放在了主内容的LinearLayout里,这会让DrawerLayout无法识别它是侧边栏组件。同时NavigationView的宽度应该设为wrap_content而不是match_parent,不然会覆盖主内容。
3. Fragment未启用OptionsMenu
在Fragment中使用onOptionsItemSelected方法,必须先调用setHasOptionsMenu(true)告诉系统这个Fragment需要处理菜单事件,否则该方法不会被触发。
修正后的代码
Java代码修改
public class CardDashBoard extends Fragment implements View.OnClickListener { // ... 变量声明部分保持不变 ... @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { view= inflater.inflate(R.layout.fragment_card_dash_board, container, false); return view; } @Override public void onActivityCreated(Bundle savedInstanceState){ super.onActivityCreated(savedInstanceState); // 关键:启用Fragment的OptionsMenu,确保onOptionsItemSelected被调用 setHasOptionsMenu(true); // ... 其他控件初始化代码(image1、text1等)保持不变 ... // 修正Toolbar的ID查找 toolbar=(Toolbar) view.findViewById(R.id.tool_bar); ((AppCompatActivity)getActivity()).setSupportActionBar(toolbar); drawerLayout=(DrawerLayout) view.findViewById(R.id.drawerlayout1); actionBarDrawerToggle=new ActionBarDrawerToggle(getActivity(),drawerLayout,R.string.open,R.string.close); drawerLayout.addDrawerListener(actionBarDrawerToggle); actionBarDrawerToggle.syncState(); ((AppCompatActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true); ((AppCompatActivity) getActivity()).getSupportActionBar().setHomeButtonEnabled(true); ((AppCompatActivity)getActivity()).getSupportActionBar().setTitle(null); actionBarDrawerToggle.getDrawerArrowDrawable().setColor(getResources().getColor(R.color.colorPrimary1)); } @Override public boolean onOptionsItemSelected(MenuItem item) { if(actionBarDrawerToggle.onOptionsItemSelected(item)) { return true; } return super.onOptionsItemSelected(item); } // ... onClick方法保持不变 ... }
XML布局修改
<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:id="@+id/drawerlayout1" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- 主内容区域:放Toolbar和你的业务内容 --> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.v7.widget.Toolbar android:id="@+id/tool_bar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/logincolor" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> <!-- 这里添加你原来的CardView等主内容控件 --> </LinearLayout> <!-- 侧边栏NavigationView:作为DrawerLayout的直接子View --> <android.support.design.widget.NavigationView android:id="@+id/navi_dra1" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" android:fitsSystemWindows="true" android:textAlignment="center" app:headerLayout="@layout/navigation_header" app:itemIconTint="#6E107F" app:itemTextColor="#6E107F" app:menu="@menu/drawer_menu" /> </android.support.v4.widget.DrawerLayout>
额外注意事项
- 确保你的宿主Activity继承自
AppCompatActivity,并且使用AppCompat主题(比如Theme.AppCompat.Light.NoActionBar),因为Toolbar和ActionBarDrawerToggle依赖AppCompat框架。 - 检查
R.string.open和R.string.close是否已经在strings.xml中定义,避免资源找不到的问题。
内容的提问来源于stack exchange,提问作者Sagar S
相关产品推荐
相关产品推荐

