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 jedenDrawerLayout
s 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?