2016-02-08 5 views
0

У меня есть drawerLayout (support.v4) с navigationView и есть много элементов (как и многие пункты меню). Одновременно с тем, что на экране появляется меньше предметов, некоторые пункты меню приводят к другому меню со многими элементами.Подождите, пока анимация DrawerLayout не будет выполнена

Дело в том, что мой переключатель меню работает нормально, я могу перейти из одного меню в другое, но у меня нет анимации ... Я хочу закрыть ящик, когда выбран элемент, связанный с другим меню и после загрузки меню, чтобы снова открыть его.

Вот мой код:

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

Когда я выбираю пункт не ссылаются на какой-либо суб меню, ящик закрывается, но в остальном я не вижу анимации, просто меняется содержимое меню без анимации. Как заставить приложение ждать, пока ящик закрывается, прежде чем изменять содержимое меню?

Спасибо!

+0

Добавить задержку для изменения содержимого меню? Может быть, 200-300 миллисекунд? –

+0

Вам нужно использовать обработчик для этого ... –

+0

Я добавил код, это вам поможет? – dequec64

ответ

0

Вы можете использовать методы обратного вызова макета ящика из официальной документации андроида.

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

0

Вы можете setDrawerListener на DrawLayout как этот

 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; 
} 
Смежные вопросы