Was Sie brauchen, um passieren zu v4.- widget.DrawerLayout.isDrawerOpen()/.openDrawer()/.closeDrawer()

Ich habe versucht meinen code auf der DrawerLayout wie vorgeschlagen von android hier als SlidingDrawer ist veraltet.

Mein problem ist, dass bisher DrawerLayout scheint entweder sehr schlecht umgesetzt, hat wenig hilfreichen Fehlermeldungen (keine defensive Programmierung) und/oder nicht erklärt gut genug in der Dokumentation.

den isDrawerOpen() Methode ist beschrieben hier:

public boolean isDrawerOpen (View Schublade)

Überprüfen, wenn die angegebene Zuführung Ansicht momentan im geöffneten Zustand. Werden
als "öffnen" in der Schublade haben muss, sich in seine vollständig sichtbar
Zustand. Um zu überprüfen, für die partielle Sichtbarkeit verwenden
isDrawerVisible(android.Blick.Ansicht).

Parameter: Schublade - Schublade-Ansicht zu überprüfen,

Rückgabe: true, wenn die angegebene Zuführung Ansicht im geöffneten Zustand

Jede der Methoden isDrawerOpen(View drawer), openDrawer(View drawer) und closeDrawer(View drawer) nicht funktionieren, wenn bestanden: Das DrawerLayout in Frage oder eines der Kinder. Ich habe keine Ahnung, was soll ich füttern Sie diese Methoden, um Ihnen zu erlauben, zu funktionieren. Kann jemand lassen Sie mich wissen?

Siehe unten für die komplette Beschreibung des Problems bei der Umsetzung.

Ich habe ein layout, in etwa so:

<android.support.v4.widget.DrawerLayout
    android:id="@+id/mainmenuPanel"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

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

    <FrameLayout
        android:id="@+id/menuPane"
        android:layout_width="300dp"
        android:layout_height="match_parent" />
</android.support.v4.widget.DrawerLayout>

Und in meinem code habe ich die folgende Methode verknüpft eine Taste:

protected void onCreate(Bundle savedInstanceState) {    
    ...
    mMenuPanel = (DrawerLayout) findViewById(R.id.mainmenuPanel);
    ....
}

public boolean isDrawerOpen() {
    if(mMenuPanel != null) {
        return mMenuPanel.isDrawerOpen(mMenuPanel);
    }
    return false;
}

Aber wenn Sie es selbst als argument (was überflüssig wäre, in der extreme) erhalten Sie die folgende Fehlermeldung:

E/AndroidRuntime(11241): java.lang.ClassCastException: 
android.widget.FrameLayout$LayoutParams cannot be cast to 
android.support.v4.widget.DrawerLayout$LayoutParams

(Die, wie Sie bemerken werden, nicht geben Ihnen alle Informationen darüber, was Sie falsch gemacht haben. Stattdessen ist es ein symtom des Problems).

Anderen Antworten hier oder hier sind entweder unverständlich oder sehr eng an die Frage ohne viel Erklärung. Auch so habe ich versucht, indem ein faux LinearLayout oder einer der DrawerLayouts Kinder und geben diese Fehler:

E/AndroidRuntime(11424): java.lang.IllegalArgumentException: 
View android.widget.FrameLayout{420f5ea8 V.E..... ........ 
0,0-800,1172 #7f060038 app:id/menuPane} is not a drawer

Kann mir jemand erklären, was diese Methoden eigentlich haben müssen, übergeben Sie Sie zur Arbeit?

InformationsquelleAutor Graeme | 2013-11-29
Schreibe einen Kommentar