2016-01-12 4 views
0

enter image description hereКак заставить свою кнопку ActionBar DrawerToggle работать?

public class MainActivity extends ActionBarActivity { 
     mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,R.drawable.ic_launcher, R.string.drawer_open, R.string.drawer_close) { 
      @Override 
      public void onDrawerOpened(View drawerView) { 
       super.onDrawerOpened(drawerView); 

       invalidateOptionsMenu(); 
      } 

      @Override 
      public void onDrawerClosed(View drawerView) { 
       super.onDrawerClosed(drawerView); 
       Log.d(TAG, "onDrawerClosed: " + getTitle()); 

       invalidateOptionsMenu(); 
      } 
     }; 

     mDrawerLayout.setDrawerListener(mDrawerToggle); 
    } 

Здесь я использовал DrawerToggle и определили функцию для него, но он не работает.

Что следует определить в методе invalidateOptionsMenu()?

+1

я думаю, что вы пропустили 'синхронизации()' –

+0

Где я должен добавить его \ – prabhu

+0

'actionBarDrawerToggle.syncState (?);' Увидеть эту ссылку враг рабочий пример –

ответ

0

Как Nilesh отметил добавить эту строку mDrawerToggle.syncState();

ниже mDrawerLayout.setDrawerListener(mDrawerToggle);

последней строки в коде. Попробуйте

+0

Я добавил его как nilesh, но его не работает. – prabhu

+0

Я обновил свой вывод. В верхней части экрана я получаю пустое пространство над панелью действий, а кнопка переключения на нем не работает! – prabhu

+0

Я вижу, что вы используете Android-студию, почему вы не используете шаблон ящика для навигации? он должен сэкономить много времени, а затем пройти через код и проверить код, чтобы понять – Veer3383

1

Для Включить кнопку ActionBar Переключить

// enabling action bar app icon and behaving it as toggle button 
getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
getSupportActionBar().setHomeButtonEnabled(true); 
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, 
     R.drawable.drawer, //nav menu toggle icon 
     R.string.app_name // nav drawer open - description for accessibility 
    ) { 
    public void onDrawerClosed(View view) { 
     // calling onPrepareOptionsMenu() to show action bar icons 
     invalidateOptionsMenu(); 
     super.onDrawerClosed(view); 
    } 

    public void onDrawerOpened(View drawerView) { 
     // calling onPrepareOptionsMenu() to hide action bar icons 
     invalidateOptionsMenu(); 
     super.onDrawerOpened(drawerView); 
    } 
}; 

mDrawerLayout.setDrawerListener(mDrawerToggle); 


/** 
* When using the ActionBarDrawerToggle, you must call it during 
* onPostCreate() and onConfigurationChanged()... 
*/ 

@Override 
protected void onPostCreate(Bundle savedInstanceState) { 
    super.onPostCreate(savedInstanceState); 
    // Sync the toggle state after onRestoreInstanceState has occurred. 
    mDrawerToggle.syncState(); 
    //mDrawerLayout.openDrawer(mDrawer); 
} 

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    // Pass any configuration change to the drawer toggls 
    mDrawerToggle.onConfigurationChanged(newConfig); 
} 

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // toggle nav drawer on selecting action bar app icon/title 
     /*if (mDrawerToggle.onOptionsItemSelected(item)) { 
      return true; 
     }*/ 
     switch (item.getItemId()) { 
     case android.R.id.home: 
      if(mDrawerLayout.isDrawerOpen(mDrawer)) 
      { 
       mDrawerLayout.closeDrawer(mDrawer); 
      } 
      else { 
       mDrawerLayout.openDrawer(mDrawer); 
      } 
      break; 

     default: 
      break; 
     } 
     return super.onOptionsItemSelected(item); 

    } 

/* * 
    * Called when invalidateOptionsMenu() is triggered 
    */ 
@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 
    // if nav drawer is opened, hide the action items 
    //boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawer); 
    //menu.findItem(R.id.action_settings).setVisible(!drawerOpen); 
    return super.onPrepareOptionsMenu(menu); 
} 
+2

if (mDrawerLayout.isDrawerOpen (mDrawer)) - Im получение ошибки в этом коде "не может разрешить символ mDrawer" – prabhu

+1

"mDrawer" это макет, который вы открываете (Ex ListView, LinerLayout, который находится внутри макета ящика) –

0

ниже код будет работать отлично.

mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, mToolBar, R.string.app_name, 
        R.string.abc_action_bar_home_description) { 

       /** Called when a drawer has settled in a completely closed state. */ 
       public void onDrawerClosed(View view) { 
        super.onDrawerClosed(view); 

       } 

       /** Called when a drawer has settled in a completely open state. */ 
       public void onDrawerOpened(View drawerView) { 
        super.onDrawerOpened(drawerView); 

       } 
      }; 
      mDrawerLayout.setDrawerListener(mDrawerToggle); 
      getSupportActionBar().setDisplayShowHomeEnabled(true); 
      mDrawerToggle.syncState(); 
+0

Я обновил свой вывод. В верхней части экрана я получаю пустое пространство над панелью действий, а кнопка переключения на нем не работает! - – prabhu

Смежные вопросы