Was müssen Sie an v4.widget.DrawerLayout.isDrawerOpen () /. OpenDrawer () /. CloseDrawer () übergeben

Ich habe versucht, meinen Code in das zu verschiebenDrawerLayout wie von Android vorgeschlagenHier wieSlidingDrawer ist veraltet.

Mein Problem ist das soweitDrawerLayout scheint entweder sehr schlecht implementiert zu sein, hat nicht hilfreiche Fehlermeldungen (keine defensive Programmierung) und / oder wird in der Dokumentation nicht gut genug erklärt.

dasisDrawerOpen() Methode wird beschriebenHier:

public boolean isDrawerOpen (Schublade anzeigen)

Überprüfen Sie, ob die angegebene Schubladenansicht derzeit geöffnet ist. Um als "offen" zu gelten, muss sich die Schublade in ihrem vollständig sichtbaren Zustand befunden haben. Verwenden Sie isDrawerVisible (android.view.View), um die teilweise Sichtbarkeit zu überprüfen.

Parameter: Schublade - Zu überprüfende Schubladenansicht

Rückgabe: true, wenn die angegebene Schubladenansicht geöffnet ist

Jede der MethodenisDrawerOpen(View drawer), openDrawer(View drawer) undcloseDrawer(View drawer) funktioniert nicht, wenn bestanden:DrawerLayout in Frage oder eines seiner Kinder. Ich habe keine Ahnung, was ich in diese Methoden einspeisen soll, damit sie funktionieren. Kann mir jemand Bescheid geben?

Im Folgenden finden Sie eine vollständige Problembeschreibung mit der Implementierung.

Ich habe ein Layout wie folgt:

<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 an eine Schaltfläche angeschlossen:

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

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

Wenn Sie es jedoch selbst als Argument angeben (was im Extremfall überflüssig wäre), erhalten Sie den folgenden Fehler:

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

(Was Ihnen, wie Sie feststellen werden, keine Informationen darüber gibt, was Sie falsch gemacht haben. Es ist stattdessen ein Symptom des Problems.)

Andere AntwortHier oderHier sind entweder unverständlich oder ohne viel Erklärung sehr eng mit der Frage verbunden. Trotzdem habe ich versucht, einen Imitat hinzuzufügenLinearLayout oder einer derDrawerLayouts Kinder und jeder gebendiese Error:

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 sindtatsächlich Müssen sie übergeben haben, um zu arbeiten?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage