2013-08-06 5 views
10

Ich verwende eine android.support.v4.widget.DrawerLayout in meiner Tätigkeit. Solange ich die Wischgeste benutze, um es zu öffnen, funktioniert es gut.DrawerLayout.openDrawer funktioniert nicht beim ersten Mal

Allerdings, wenn ich es über einen Button-Klick öffnen möchten, indem drawer.openDrawer(Gravity.LEFT) Aufruf, funktioniert es nicht.

Aber, Wenn ich es einmal mit der Swipe-Geste öffne, danach funktioniert es normalerweise mit der Taste klicken.

Irgendeine Idee, wie ich das lösen oder umgehen könnte?

+0

Klicken Sie auf die Schaltfläche, um nur einige zufällige Schaltflächen anzuzeigen, oder möchten Sie auf das Symbol oben links klicken, um die Schublade zu wechseln? – btse

+0

Es ist für einen zufälligen Knopf, den ich habe.Nochmal, das seltsame ist, dass es normal funktioniert, nachdem Sie es einmal mit der Swipe-Geste geöffnet und geschlossen haben, während Sie, wenn Sie zuerst die Taste drücken, nichts tun – user2527666

+0

Das ist sehr merkwürdig. Haben Sie eine Log-Anweisung eingegeben, um sicherzustellen, dass die Methode, die Ihre Schaltfläche aufruft, beim ersten Klick aufgerufen wird? – btse

Antwort

19

implementiere ich hatte das gleiche Problem, und ich habe gerade herausgefunden, dass die FrameLayout aus irgendeinem Grund, dass die Schublade die haben repräsentiert Visibility auf "Gone" gesetzt, das geht wahrscheinlich während der ersten slideGesture auf "visible".

So öffnen Sie Ihr Layout XML-Datei, suchen Sie Ihre FrameLayout, die die Schublade darstellt und einfach die Sichtbarkeit Einstellung löschen. Mein öffnendes Tag ist jetzt wie folgt:

<FrameLayout 
    android:layout_width="305dp" 
    android:layout_height="match_parent" 
    android:layout_gravity="start"> 

Das funktionierte für mich.

Prost

3

Wenn Sie es von oben links Toggle öffnen möchten, sollten Sie onOptionsItemSelected(MenuItem item)

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // The action bar home/up action should open or close the drawer. 
    // ActionBarDrawerToggle will take care of this. 
    if (mDrawerToggle.onOptionsItemSelected(item)) { 
     return true; 
    } 

    switch (item.getItemId()) { 
    case android.R.id.home: 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 
+0

Ich verwende keine Aktionsleiste ... – user2527666

+0

Es ist bemerkenswert, dass "mDrawerToggle.onOptionsItemSelected" false zurückgibt, wenn eines der Fragment ein ActionBar-Menü hat. –

0

Bitte verwenden clearFocus() Methode für DrawerLayout Objekt.

0

Das gleiche Problem wurde festgestellt und konnte behoben werden, indem eine Breite für das Schubladenelement innerhalb des Layouts angegeben wurde.

Ohne Attribut layout_width wurde die Schublade beim ersten Aufruf von openDrawer(), , nicht mit dem entsprechenden Wert geöffnet.

<FrameLayout 
    android:id="@+id/container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
</FrameLayout> 

<FrameLayout 
    android:layout_width="300dp" 
    android:layout_height="match_parent" 
    android:layout_gravity="right" 
    android:background="#ffffff" 
    android:id="@+id/drawer_content"> 
</FrameLayout> 

0

Zu dumm, ich ein leeres Layout festgelegt haben, wurde Problem wie gerade oben beschrieben, wenn die Schublade manuell das erste Mal, danach gezogen wurde, arbeitete die Taste, aber ohne es zuerst zu ziehen, öffnete sich die Navigationsschublade nie.

Setzen Sie nicht ein leeres Layout.

Das Entfernen meines EmptyLayout aus der ListView, die den NavigationDrawerContent darstellt, hat es wieder perfekt gemacht.

DONT

drawerContentListView.setEmptyView(getLayoutInflater().inflate(R.layout.navigation_drawer_empty_layout, null)); 

**** kostete mich mehr als eine Stunde.