Co musisz przekazać do v4.widget.DrawerLayout.isDrawerOpen () /. OpenDrawer () /. CloseDrawer ()

Próbowałem przenieść mój kod doDrawerLayout jak sugeruje androidtutaj tak jakSlidingDrawer jest przestarzałe.

Mój problem jest taki, jak dotądDrawerLayout wydaje się być albo bardzo źle zaimplementowany, ma niepomyślne komunikaty o błędach (brak programowania obronnego) i / lub nie jest wystarczająco wyjaśniony w dokumentacji.

isDrawerOpen() metoda jest opisanatutaj:

public boolean isDrawerOpen (View drawer)

Sprawdź, czy dany widok szuflady jest obecnie w stanie otwartym. Aby szuflada została uznana za „otwartą”, musiała ustawić się w pełni widocznym stanie. Aby sprawdzić częściową widoczność, należy użyć narzędzia DrawerVisible (android.view.View).

Parametry: drawer - widok szuflady do sprawdzenia

Zwraca: prawda, jeśli dany widok szuflady jest w stanie otwartym

Każda z metodisDrawerOpen(View drawer), openDrawer(View drawer) icloseDrawer(View drawer) nie działają po przejściu: TheDrawerLayout na pytanie lub jedno z jego dzieci. Nie mam pojęcia, co mam wnieść do tych metod, aby umożliwić im funkcjonowanie. Czy ktoś może mi powiedzieć?

Zobacz poniżej opis całego problemu wraz z implementacją.

Mam taki układ:

<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>

W moim kodzie mam następującą metodę podłączoną do przycisku:

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

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

Jeśli jednak podasz go jako argument (który byłby zbyteczny w skrajnym przypadku), pojawi się następujący błąd:

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

(Jak zauważysz, nie daje ci żadnych informacji o tym, co zrobiłeś źle. Zamiast tego jest to symtom problemu).

Inne odpowiedzitutaj lubtutaj są niezrozumiałe lub bardzo ściśle związane z pytaniem bez większego wyjaśnienia. Mimo to próbowałem dodać sztuczkęLinearLayout lub jedenDrawerLayouts dzieci i każdy dajeto błąd:

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

Czy ktoś może wyjaśnić, co te metodytak właściwie trzeba im przekazać do pracy?

questionAnswers(4)

yourAnswerToTheQuestion