我有一个带有navigationView的drawerLayout (support.v4),并且有很多菜单项(比如很多菜单项多达n个)。为了同时在屏幕上显示较少的菜单项,某些菜单项会导致另一个包含多个菜单项的菜单。
问题是,我的菜单开关工作得很好,我可以从一个菜单切换到另一个菜单,但我没有动画……我希望在选择链接到另一个菜单的项目时关闭抽屉,并在加载菜单后再次打开它。
下面是我的代码:
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem selectedItem) {
mDrawerLayout.closeDrawer(GravityCompat.START);
Log.d(MainActivity.class.getName(), selectedItem.toString());
MobileXMLMenu menu = UserMenu.getInstance().getMenu();
for(int i = 0; i < menu.sizeMenuItems(); i++){
if(menu.getMenuItem(i).getLabel(Utility.retreiveLanguage()).equals(selectedItem.toString())){
Log.d(MainActivity.class.getName(), menu.getMenuItem(i).sizeMenuItems() + "");
if(menu.getMenuItem(i).sizeMenuItems() > 0){
Menu nMenu = navigationView.getMenu();
nMenu.clear();
for(int j = 0; j < menu.getMenuItem(i).sizeMenuItems(); j++){
MobileXMLMenuItem item = menu.getMenuItem(i).getMenuItem(j);
nMenu.add(item.getLabel(Utility.retreiveLanguage())).setIcon(MemberOptionsManager.getInstance().getMenuItemIcon(item.getDecorator()));
}
mDrawerLayout.openDrawer(GravityCompat.START);
isInSubmenu = true;
}
}
}
return false;
}
});我在我的ActionBarDrawerToggle上也有这个(不知道这是否有用):
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, mToolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close){
public void onDrawerClosed(View view){
super.onDrawerClosed(view);
getSupportActionBar().setTitle(mFragment.getFragmentName());
invalidateOptionsMenu();
mDrawerToggle.syncState();
}
public void onDrawerOpened(View drawerView){
super.onDrawerClosed(drawerView);
getSupportActionBar().setTitle("Open");
invalidateOptionsMenu();
mDrawerToggle.syncState();
}
};当我选择一个没有链接到任何子菜单的项目时,抽屉就会关闭,但除此之外,我看不到任何动画,只有菜单内容改变,没有动画。如何强制我的应用程序在更改菜单内容之前等待抽屉关闭?
谢谢!
发布于 2016-02-09 01:04:32
您可以在android官方文档中使用抽屉布局的回调方法。
onDrawerClosed(View drawerView)
onDrawerOpened(View drawerView)
onDrawerSlide(View drawerView, float slideOffset)
onDrawerStateChanged(int newState)您可以在link:http://developer.android.com/reference/android/support/v4/widget/DrawerLayout.DrawerListener.html找到更多信息
发布于 2016-02-09 01:24:00
你可以像这样在DrawLayout上使用setDrawerListener
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, mDrawerLayout, mToolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close) {
public void onDrawerClosed(View view) {
handleClickNavigationItem(mClickedNavigationItem);
}
public void onDrawerOpened(View drawerView) {
}
};
mDrawerLayout.setDrawerListener(toggle);handleClickNavigationItem方法包含处理导航事件的代码。
只需将单击的项目保存在onNavigationItemSelected方法中
public boolean onNavigationItemSelected(MenuItem item) {
mClickedNavigationItem = item.getItemId();
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}https://stackoverflow.com/questions/35274886
复制相似问题