2015-06-13 15 views
26

Ho un semplice android.support.v7.widget.Toolbar e tutto quello che sto cercando di fare è aprire un NavigationDrawer premendo l'icona "hamburger" nell'angolo in alto a sinistra. Il pulsante "hamburger" è visibile, e quando inizio a tirare da sinistra vedo l'animazione sul pulsante ma premendo il pulsante non si apre/chiude il NavigationDrawer come mi aspetto. Ho seguito la [Documentazione di Google] [1] e ancora non sono in grado di capirlo. Ci scusiamo per la confusione, sotto è il codice semplificato Attualmente sto tentando di utilizzare:Fare clic sull'icona dell'hamburger sulla barra degli strumenti non si apre Navigation Drawer

public class MainActivity extends AppCompatActivity implements 
    View.OnClickListener, 
    GoogleApiClient.ConnectionCallbacks, 
    GoogleApiClient.OnConnectionFailedListener { 



@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 


    setContentView(R.layout.activity_main); 


    Toolbar toolbar = (Toolbar) findViewById(R.id.my_toolbar); 
    setSupportActionBar(toolbar); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 



    toolbar.setNavigationOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Log.d("NICK", "button button button.................."); 
     } 
    }); 

     mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer); 
     NavigationView n = (NavigationView) findViewById(R.id.nav); 
     mDrawerLayout.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View v) { 
       Log.d("NICK", "button button button.................."); 
      } 
     }); 

     //mDrawerLayout.setDrawerListener(mDrawerToggle); 
     n.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 
      @Override 
      public boolean onNavigationItemSelected(MenuItem menuItem) { 
       switch (menuItem.getItemId()) { 
        ////....... 

       } 
       mDrawerLayout.closeDrawers(); // CLOSE DRAWER 
       return true; 
      } 
     }); 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    Log.d("NICK","CWECNEWKVNERIPNVIEWNFVIPEWNVIPEWNVPIEWNVPIEWNVPIEWNVPIRWNVPRWVPO"); 
    switch (item.getItemId()) { 
     case android.R.id.home: 
      mDrawerLayout.openDrawer(GravityCompat.START); // OPEN DRAWER 
      Log.d("NICK","CWECNEWKVNERIPNVIEWNFVIPEWNVIPEWNVPIEWNVPIEWNVPIEWNVPIRWNVPRWVPO"); 
      return true; 

    } 
      return super.onOptionsItemSelected(item); 


} 

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    mDrawerToggle.onConfigurationChanged(newConfig); 
} 



@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.drawer, menu); 
    return true; 
} 


} 

}

E come è non ho ricevuto nessuna delle istruzioni di debug di registro durante l'esecuzione.

Questo è essenzialmente il problema che ho: https://stackoverflow.com/a/26636045/1489990. L'ho seguito e non funziona.

È a mia conoscenza che setNavigationOnClickListener viene chiamato quando si preme l'icona dell'hamburger, e questo è il punto su cui sto concentrando i miei sforzi per far sì che l'evento venga gestito correttamente perché quando premo il pulsante non ottengo la mia dichiarazione di registro. Fammi sapere se questa idea non è corretta. https://developer.android.com/reference/android/widget/Toolbar.html#setNavigationOnClickListener(android.view.View.OnClickListener)

mio layout:

ActivityMain.xml

<RelativeLayout 
xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/d" 
android:background="@drawable/home_wall"> 




<android.support.v7.widget.Toolbar 
    android:id="@+id/my_toolbar" 
    android:layout_height="wrap_content" 
    android:layout_width="match_parent" 
    android:minHeight="?attr/actionBarSize" 
    android:background="?attr/colorPrimary" 
    android:layout_marginBottom="10dp" 
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
    android:layout_marginTop="25dp" 

    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" /> 



<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:id="@+id/drawer" 

    android:layout_height="match_parent" 
    android:fitsSystemWindows="true"> 



    <ImageView 
     android:layout_width="fill_parent" 
     android:layout_height="200dp" 
     android:id="@+id/imageView" 
     android:src="@drawable/trans2" 
     android:layout_alignParentTop="true" 
     android:layout_marginTop="10dp" 
     android:layout_marginLeft="5dp" 
     android:layout_marginRight="5dp" 
     android:paddingBottom="300dp" /> 

    <RelativeLayout 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:id="@+id/d8" 
     android:layout_alignParentTop="true" 
     android:layout_alignLeft="@+id/imageView" 
     android:layout_alignStart="@+id/imageView" 
     android:paddingTop="0dp"> 

     <Button 
      android:layout_width="75dp" 
      android:layout_height="50dp" 
      android:text="Gallery" 
      android:id="@+id/save_button" 
      android:background="#dd2c00" android:textColor="#fff" 
      android:layout_below="@+id/Purchases" 
      android:layout_toRightOf="@+id/start_button" 
      android:layout_toEndOf="@+id/start_button" /> 
     <Button 
      android:layout_width="125dp" 
      android:layout_height="50dp" 
      android:text="Store" 
      android:id="@+id/Purchases" 
      android:background="#ff6e40" android:textColor="#fff" 
      android:layout_above="@+id/instructions_button6" 
      android:layout_toLeftOf="@+id/start_button" 
      android:layout_toStartOf="@+id/start_button" 
      android:layout_marginBottom="98dp" /> 
     <Button 
      android:layout_width="75dp" 
      android:layout_height="50dp" 
      android:text="Help" 
      android:id="@+id/instructions_button6" 
      android:background="#dd2c00" android:textColor="#fff" 
      android:layout_alignParentBottom="true" 
      android:layout_toLeftOf="@+id/start_button" 
      android:layout_toStartOf="@+id/start_button" 
      android:layout_marginLeft="5dp" 
      android:layout_marginBottom="10dp" /> 
     <Button 
      android:layout_width="75dp" 
      android:layout_height="300dp" 
      android:text="Start" 
      android:id="@+id/start_button" 
      android:background="#ff3d00" 
      android:textColor="#fff" 
      android:layout_alignParentBottom="true" 
      android:layout_centerHorizontal="true" 
      android:layout_marginBottom="10dp" /> 
     <Button 
      android:layout_width="125dp" 
      android:layout_height="50dp" 
      android:text="Achievements" 
      android:id="@+id/Scores" 
      android:background="#ff6e40" android:textColor="#fff" 
      android:layout_alignTop="@+id/Purchases" 
      android:layout_toRightOf="@+id/start_button" 
      android:layout_toEndOf="@+id/start_button" /> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Welcome to the quiz!" 
      android:id="@+id/textView" 
      android:textColor="#fff" 
      android:textSize="20dp" 
      android:layout_alignParentTop="true" 
      android:layout_centerHorizontal="true" 
      android:layout_marginTop="70dp" /> 


     <!-- sign-in button --> 
     <com.google.android.gms.common.SignInButton 
      android:id="@+id/sign_in_button" 
      android:layout_width="110dp" 
      android:layout_height="50dp" 
      android:layout_above="@+id/start_button" 
      android:layout_centerHorizontal="true" 
      android:visibility="visible" /> 

     <!-- sign-out button --> 
     <Button 
      android:id="@+id/sign_out_button" 
      android:layout_width="125dp" 
      android:layout_height="wrap_content" 
      android:text="Sign Out" 
      android:visibility="invisible" 
      android:background="#dd4b39" 
      android:textColor="#fff" 
      android:layout_alignTop="@+id/sign_in_button" 
      android:layout_centerHorizontal="true" 
      android:layout_marginTop="160dp" /> 

    </RelativeLayout> 

    <android.support.design.widget.NavigationView 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:background="#fff" 
     android:id="@+id/nav" 

     app:headerLayout="@layout/drawer_header" 
     app:menu="@menu/drawer"/> 
</android.support.v4.widget.DrawerLayout> 

Drawer.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/drawer_menu" 
xmlns:app="http://schemas.android.com/apk/res-auto"> 

<item android:title="Google Play Games" 

    android:icon="@drawable/ic_local_airport_white_48dp"> 
    <menu> 
     <item 
      android:id="@+id/Sign_in_drawer" 

      android:icon="@drawable/games_controller_grey" 
      android:title="Sign in" /> 
     <item 
      android:id="@+id/ach" 
      android:icon="@drawable/games_achievements" 
      android:title="Achievements" /> 
    </menu> 
</item> 

<item android:title="Start a Quiz" 

    android:icon="@drawable/ic_local_airport_white_48dp"> 
    <menu> 
     <item 
      android:id="@+id/quizStart25" 

      android:icon="@drawable/ic_local_airport_white_48dp" 
      android:title="25 Questions" /> 
     <item 
      android:id="@+id/quizStart10" 
      android:icon="@drawable/ic_local_airport_white_48dp" 
      android:title="10 Questions" /> 
    </menu> 
</item> 

<group 
    android:checkableBehavior="single"> 
    <item 
     android:id="@+id/gallery" 

     android:icon="@drawable/ic_photo_library_white_48dp" 
     android:title="Gallery" /> 
    <item 
     android:id="@+id/stats" 
     android:icon="@drawable/ic_toc_white_48dp" 
     android:title="Statistics" /> 
    <item 
     android:id="@+id/store" 
     android:icon="@drawable/ic_shop_white_48dp" 
     android:title="Store" /> 
    <item 
     android:id="@+id/settings" 
     android:icon="@drawable/ic_settings_white_48dp" 
     android:title="Settings" /> 
    <item 
     android:id="@+id/about" 
     android:icon="@drawable/ic_info_white_48dp" 
     android:title="About" /> 

</group> 

<item android:title="Support"> 
    <menu> 
     <item 
      android:id="@+id/help_drawer" 
      android:icon="@drawable/ic_help_white_48dp" 
      android:title="Help" /> 
     <item 
      android:id="@+id/report" 
      android:icon="@drawable/ic_report_problem_white_48dp" 
      android:title="Contact Developer" /> 
     <item 
      android:id="@+id/GPlusCommunity" 
      android:icon="@drawable/btn_g_white_normal" 
      android:title="Google+ Community" /> 

    </menu> 
</item> 

+0

Il problema è come hai creato il tuo layout. La barra degli strumenti si trova all'esterno di DrawerLayout, pertanto la barra degli strumenti perde il contesto. Vedi la mia risposta aggiornata. – hungryghost

risposta

78

Vedi il mio answer ad un post simile.

Fondamentalmente, basta saltare lo ActionBarDrawerToggle se non è necessario per altre cose (come i callback). È possibile rimuovere tutto ciò che il codice e solo implementare il vicino comportamento di apertura/cassetto, in questo modo:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case android.R.id.home: 
      mDrawerLayout.openDrawer(GravityCompat.START); // OPEN DRAWER 
      return true; 
     .... 
    } 
    return super.onOptionsItemSelected(item); 
} 

segmento Il codice sopra funziona anche se non si sta utilizzando NavigationView.Se si utilizza la visualizzazione di navigazione, nella vostra NavigationView clic ascoltatore:

navigationView.setNavigationItemSelectedListener(
    new NavigationView.OnNavigationItemSelectedListener() { 
     @Override 
     public boolean onNavigationItemSelected(MenuItem menuItem) { 
      // Handle menu item clicks here. 
      drawerLayout.closeDrawers(); // CLOSE DRAWER 
      return true; 
     } 
    }); 

Aggiornamento:

Inoltre, assicurarsi che la vostra attività si sta estendendo AppCompatActivity (e non ActionBarActivity). Vedi my answer here per maggiori informazioni.

Update2:

ho il debug il codice modificato. Prova questo. Dovrebbe funzionare ora. Leggere i miei commenti in linea per vedere che cosa ho cambiato e perché:

import android.os.Bundle; 
import android.support.design.widget.NavigationView; 
import android.support.v4.view.GravityCompat; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 

public class MainActivity extends AppCompatActivity { 
//  View.OnClickListener, 
//  GoogleApiClient.ConnectionCallbacks, 
//  GoogleApiClient.OnConnectionFailedListener { 


    DrawerLayout mDrawerLayout; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Toolbar toolbar = (Toolbar) findViewById(R.id.my_toolbar); 
     setSupportActionBar(toolbar); 
     // You were missing this setHomeAsUpIndicator 
     getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_menu); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

     // I removed your toolbar and drawer click listeners. 
     // They're not needed to open drawer. 
     // The drawer opens from onOptionsItemSelected(). 

     mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer); 
     NavigationView n = (NavigationView) findViewById(R.id.nav); 
     n.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 
      @Override 
      public boolean onNavigationItemSelected(MenuItem menuItem) { 
       switch (menuItem.getItemId()) { 
        ////....... 

       } 
       mDrawerLayout.closeDrawers(); // CLOSE DRAWER 
       return true; 
      } 
     }); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 

     Log.d("NICK", "CWECNEWKVNERIPNVIEWNFVIPEWNVIPEWNVPIEWNVPIEWNVPIEWNVPIRWNVPRWVPO"); 
     switch (item.getItemId()) { 
      // THIS IS YOUR DRAWER/HAMBURGER BUTTON 
      case android.R.id.home: 
       mDrawerLayout.openDrawer(GravityCompat.START); // OPEN DRAWER 
       Log.d("NICK", "CWECNEWKVNERIPNVIEWNFVIPEWNVIPEWNVPIEWNVPIEWNVPIEWNVPIRWNVPRWVPO"); 
       return true; 

     } 
     return super.onOptionsItemSelected(item); 
    } 
} 

// I also removed your onConfigurationChanged(). 
// It's not needed since you're no longer using ActionBarDrawerToggle. 

Update3: il problema è con il layout

Guardando il tuo ActivityMain.xml, vedo la tua barra degli strumenti è al di fuori della vostra DrawerLayout. Non puoi farlo. La barra degli strumenti deve essere un elemento secondario del DrawerLayout per consentire alla barra degli strumenti di trovare il contesto appropriato.

È necessario rendere DrawerLayout la radice della vostra attività. Ecco il documentation, e la citazione specifica è:

Per aggiungere un cassetto di navigazione, dichiara l'interfaccia utente con un oggetto DrawerLayout come la vista radice del layout. All'interno del DrawerLayout , aggiungere una vista che contiene il contenuto principale per la schermata (il layout principale quando il cassetto è nascosto) e un'altra vista che contiene il contenuto del cassetto di navigazione.

Quindi, fondamentalmente, Cambia la tua ActivityMain.xml a guardare come questo:

<android.support.v4.widget.DrawerLayout 
    android:id="@+id/drawer" 
    ... > 

    <RelativeLayout 
     android:id="@+id/d" 
     ...> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/my_toolbar" 
      ... /> 

     <!-- Your other content goes here --> 

    </RelativeLayout> 

    <android.support.design.widget.NavigationView 
     android:id="@+id/nav" 
     ... /> 

</android.support.v4.widget.DrawerLayout> 

Si spera, che si prende cura dei vostri problemi.

+0

Ho provato esattamente questo e ho anche inserito le istruzioni di registro dentro 'onOptionsItemSelected' e non vengono mai mostrate, indicando che questo metodo non è mai stato raggiunto. Come è ora ho 'onOptionsItemSelected' al di fuori del mio metodo' onCreate' se questo è importante. Ancora non ho trovato una soluzione – ez4nick

+0

@ ez4nick, vedere la mia risposta aggiornata. Stai estendendo 'ActionBarActivity' per caso? – hungryghost

+1

Sto estendendo 'AppCompatActivity' – ez4nick

8

È necessario sincronizzare la leva del cassetto:

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

EDIT: Che il codice sta lavorando per me (copiato dal tuo post)

public class TempActivity extends AppCompatActivity { 
    private ActionBarDrawerToggle mDrawerToggle; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.temp); 
     setupDrawer(); 
    } 
    @Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 
     mDrawerToggle.onConfigurationChanged(newConfig); 
    } 
    @Override 
    public boolean onOptionsItemSelected(final MenuItem item) { 
     if (mDrawerToggle.onOptionsItemSelected(item)) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
    @Override 
    protected void onPostCreate(Bundle savedInstanceState) { 
     super.onPostCreate(savedInstanceState); 
     mDrawerToggle.syncState(); 
    } 
    private void setupDrawer() { 
     Toolbar toolbar = (Toolbar) findViewById(R.id.my_toolbar); 
     setSupportActionBar(toolbar); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
     getSupportActionBar().setHomeButtonEnabled(true); 
     DrawerLayout mDrawerLayout = (DrawerLayout) findViewById(R.id.my_drawer_layout); 
     mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,toolbar,R.string.drawer_open, R.string.drawer_close) { 
      public void onDrawerClosed(View view) { 
       super.onDrawerClosed(view); 
       invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() 
      } 
      public void onDrawerOpened(View drawerView) { 
       super.onDrawerOpened(drawerView); 
       invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() 
      } 
     }; 
     mDrawerLayout.setDrawerListener(mDrawerToggle); 
    } 
} 

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/my_drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"> 
     <android.support.v7.widget.Toolbar 
      android:id="@+id/my_toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" 
      app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> 
     <FrameLayout 
      android:id="@+id/content_frame" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" /> 
    </LinearLayout> 
    <RelativeLayout 
     android:id="@+id/left_drawer" 
     android:layout_width="240dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:choiceMode="singleChoice" 
     android:divider="@android:color/transparent" 
     android:dividerHeight="0dp" 
     android:background="#111"> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textColor="#FFF" 
      android:text="DRAMER MENU" /> 
    </RelativeLayout> 
</android.support.v4.widget.DrawerLayout> 

Ma se si utilizza la nuova NavigationView, allora si don' t necessario l'interruttore ecc. Here is a good example come usarlo.

+0

Sto usando il nuovo 'NavigationView', e ho provato a seguire il link che hai fornito (Vedi Aggiornamento 2) e non ho mai ricevuto conferma del fatto che il pulsante è stato premuto. Presumo che questo sia il luogo in cui il NavigationDrawer viene effettivamente aperto/chiuso – ez4nick

+0

Quindi non è necessario impostare un 'ActionBarDrawerToggle'. – mbmc

1

Per il cassetto di commutazione è necessario impostare "casa display fino" a false: getSupportActionBar().setDisplayHomeAsUpEnabled(false);

+2

Ho provato questo e non ha risolto il mio problema. Lo stesso problema di prima. – ez4nick

1

come non ho risposta specifica al vostro problema, vorrei suggerire un approccio completamente diverso:

Nei miei progetti Im usando il Material Drawer sviluppato da Mike Penz. È davvero bello, facile da implementare e non c'è molto da preoccuparsi.

Quindi, se non riesci a trovare una soluzione per il tuo problema, potresti fare un tentativo.

1

metodo e Override onOptionsItemSelected utilizzare sotto

if(item.getItemId() == android.R.id.home){ // use android.R.id 
    mDrawerLayout.openDrawer(Gravity.LEFT); 
} 
1

Usa ActionBarDrawerToggle e implementare public boolean onOptionsItemSelected(MenuItem item)

Toolbar non deve essere all'interno di un DrawerLayout, non è probabile che sia la causa di questo problema. toggle.onOptionsItemSelected(item) cerca l'ID dell'elemento selezionato e se è android.R.id.home, la visibilità del cassetto viene alternata. Pertanto, la barra degli strumenti o qualsiasi vista che crea un oggetto Menu Home può essere posizionata in qualsiasi punto del layout.

All'interno della vostra attività:

ActionBarDrawerToggle toggle; 

private void setupDrawerToggleInActionBar() { 
    // assuming a Toolbar has been initialized in your onCreate 
    this.setSupportActionBar(toolbar); 

    // setup the action bar properties that give us a hamburger menu 
    ActionBar actionBar = this.getSupportActionBar(); 
    if(actionBar != null) { 
     actionBar.setDisplayHomeAsUpEnabled(true); 
     actionBar.setHomeButtonEnabled(true); 
    } 

    // the toggle allows for the simplest of open/close handling 
    toggle = new ActionBarDrawerToggle(this, 
             drawerLayout, 
             R.string.navigation_drawer_open, 
             R.string.navigation_drawer_close); 
    // drawerListener must be set before syncState is called 
    drawerLayout.setDrawerListener(toggle); 

    toggle.setDrawerIndicatorEnabled(true); 
    toggle.syncState(); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    // This is required to make the drawer toggle work 
    if(toggle.onOptionsItemSelected(item)) { 
     return true; 
    } 

    /* 
    * if you have other menu items in your activity/toolbar 
    * handle them here and return true 
    */ 

    return super.onOptionsItemSelected(item); 
} 
1

Basta chiamare la funzione onOptionsItemSelected (MenuItem menuItem) della classe ActionBarDrawerToggle sul menu di opzioni di attività funzione di gestione come qui di seguito.

mDrawerToggle= new ActionBarDrawerToggle(activity, drawerLayout, R.string.nav_drawer_accessbility_drawer_open, 
      R.string.nav_drawer_accessbility_drawer_close); 


@Override 
public boolean onOptionsItemSelected(final android.view.MenuItem item) { 
    navigation().getOptionsMenuInflater(this).closeSearchView(); 
    // The action bar home/up action should open or close the drawer. 
    // ActionBarDrawerToggle will take care of this behavior. 
    mDrawerToggle.onOptionsItemSelected(item); 

    return super.onOptionsItemSelected(item); 
} 

O

esclusione onOptionsItemSelected di attività come qui di seguito

public boolean onOptionsItemSelected(MenuItem item) { 
    if (item != null && item.getItemId() == android.R.id.home) { 
     toggle(); 

    } 
    return super.onOptionsItemSelected(item); 
} 

private void toggle() { 
    if (mDrawerLayout.isDrawerVisible(GravityCompat.START)) { 
     mDrawerLayout.closeDrawer(GravityCompat.START); 
    } else { 
     mDrawerLayout.openDrawer(GravityCompat.START); 
    } 
} 
0

Mentre risposta accettata qui funziona bene però, come si suol dire "Prevenire è meglio che curare" .. Aggiunta mDrawerToggle.syncState (); in onPostCreate e onConfigurationChanged() wroks molto meglio come answerd da @mbmc sopra:

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

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    mDrawerToggle.onConfigurationChanged(newConfig); 
} 
0

Se aiuta qualcuno, a me è successo lo stesso a causa dell'errore stupido di chiamare setSupportActionBar(toolbar) due volte. Basta chiamarlo una volta nel metodo onCreate e mai più. Il mio errore è stato che l'ho chiamato più tardi con un altro metodo.

Problemi correlati