【问题标题】:Wait until DrawerLayout animation is done等到 DrawerLayout 动画完成
【发布时间】:2016-02-08 16:50:10
【问题描述】:

我有一个抽屉布局 (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();
        }
    };

当我选择一个未链接到任何子菜单的项目时,抽屉关闭,否则,我看不到动画,只是菜单内容在没有动画的情况下发生变化。如何强制我的应用在更改菜单内容之前等待抽屉关闭?

谢谢!

【问题讨论】:

  • 对菜单内容更改添加延迟?也许像 200-300 毫秒?
  • 您必须为此使用处理程序...
  • 我添加了一些代码,对你有帮助吗?

标签: android menu navigation-drawer navigationview


【解决方案1】:

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

 onDrawerClosed(View drawerView)
 onDrawerOpened(View drawerView)
 onDrawerSlide(View drawerView, float slideOffset)
 onDrawerStateChanged(int newState)

您可以在链接中找到更多信息:http://developer.android.com/reference/android/support/v4/widget/DrawerLayout.DrawerListener.html

【讨论】:

    【解决方案2】:

    你可以像这样在 DrawLayout 上设置DrawerListener

            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;
    }
    

    【讨论】:

      猜你喜欢
      • 2015-07-17
      • 2013-01-21
      • 2011-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-09
      • 1970-01-01
      • 2014-07-21
      相关资源
      最近更新 更多