首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >等待DrawerLayout动画制作完成

等待DrawerLayout动画制作完成
EN

Stack Overflow用户
提问于 2016-02-09 00:50:10
回答 2查看 1.4K关注 0票数 0

我有一个带有navigationView的drawerLayout (support.v4),并且有很多菜单项(比如很多菜单项多达n个)。为了同时在屏幕上显示较少的菜单项,某些菜单项会导致另一个包含多个菜单项的菜单。

问题是,我的菜单开关工作得很好,我可以从一个菜单切换到另一个菜单,但我没有动画……我希望在选择链接到另一个菜单的项目时关闭抽屉,并在加载菜单后再次打开它。

下面是我的代码:

代码语言:javascript
复制
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上也有这个(不知道这是否有用):

代码语言:javascript
复制
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();
        }
    };

当我选择一个没有链接到任何子菜单的项目时,抽屉就会关闭,但除此之外,我看不到任何动画,只有菜单内容改变,没有动画。如何强制我的应用程序在更改菜单内容之前等待抽屉关闭?

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2016-02-09 01:04:32

您可以在android官方文档中使用抽屉布局的回调方法。

代码语言:javascript
复制
 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找到更多信息

票数 0
EN

Stack Overflow用户

发布于 2016-02-09 01:24:00

你可以像这样在DrawLayout上使用setDrawerListener

代码语言:javascript
复制
        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方法中

代码语言:javascript
复制
public boolean onNavigationItemSelected(MenuItem item) {
        mClickedNavigationItem = item.getItemId();
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
    return true;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35274886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档