解决方法
With the new
NavigationView
is it still recommended to useActionBarDrawerToggle
不,这不是必需的.
如果您查看新设计库的“官方”demo code,则不再使用ActionBarDrawerToggle,因为新的NavigationView和AppCompatActivity不需要它.
使用新的v22支持库,您可以删除所有的ActionBarDrawerToggle代码,只需使用以下操作来处理NavigationDrawer与ActionBar / ToolBar汉堡包图标之间的交互:
@Override protected void onCreate(Bundle savedInstanceState) { ... final ActionBar actionBar = getSupportActionBar(); actionBar.setHomeAsUpIndicator(R.drawable.ic_menu); actionBar.setDisplayHomeAsUpEnabled(true); ... } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: mDrawerLayout.openDrawer(GravityCompat.START); return true; .... } return super.onOptionsItemSelected(item); }
您将需要提供自己的“汉堡包”drawable(在我的例子中为R.drawable.ic_menu).此外,上述代码是处理抽屉开启所需的所有代码. onOptionsItemSelected()中的android.R.id.home案例表示您的汉堡包抽屉按钮.它指向一个内置的资源ID(不是您添加到菜单xml的东西),它会自动处理.
此外,您必须通过简单地向您的点击监听器添加closeDrawers()来实现关闭抽屉,如下所示:
navigationView.setNavigationItemSelectedListener( new NavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(MenuItem menuItem) { // Handle menu item clicks here. drawerLayout.closeDrawers(); return true; } });
closeDrawers()是DrawerLayout的一种方法,并且处理所有内容.而已.这就是您真正需要正确处理导航抽屉的代码.没有更多凌乱的代码来翻转汉堡包等!
当然,如果你真的想,你仍然可以使用NavigationView与ActionBarDrawerToggle的旧方法.但你当然不必.
如果你想要抽屉回调
即使ActionBarDrawerToggle不需要打开/关闭抽屉,它可能仍然有助于处理额外的回调(特别是如果您已经使用ActionBar).否则,您可以使用DrawerLayout.DrawerListener或使用DrawerLayout.SimpleDrawerListener()来实现自己的,来处理其他打开/关闭相关事件.