Я пытаюсь переместить мой код на DrawerLayout
, как было предложено андроидом здесь, поскольку SlidingDrawer
устарел.
Моя проблема в том, что до сих пор DrawerLayout
представляется либо очень плохо реализованным, имеет бесполезные сообщения об ошибках (без защитного программирования) и/или не объясняется достаточно хорошо в документации.
описан метод isDrawerOpen()
здесь:
public boolean isDrawerOpen (просмотрщик)
Проверьте, находится ли данный вид ящика в открытом состоянии. Быть считающийся "открытым", ящик должен был заселиться в его полностью видимый государство. Чтобы проверить использование частичной видимости isDrawerVisible (android.view.View).
Параметры: ящик - вид ящика для проверки
Возвращает: true, если данный вид ящика находится в открытом состоянии
Каждый из методов isDrawerOpen(View drawer)
, openDrawer(View drawer)
и closeDrawer(View drawer)
не работает при передаче: DrawerLayout
или любой из них. Я понятия не имею, что я должен использовать в этих методах, чтобы они могли функционировать. Может ли кто-нибудь сообщить мне?
См. ниже описание всей проблемы с реализацией.
У меня есть такой макет:
<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>
И в моем коде у меня есть следующий метод, подключенный к кнопке:
protected void onCreate(Bundle savedInstanceState) {
...
mMenuPanel = (DrawerLayout) findViewById(R.id.mainmenuPanel);
....
}
public boolean isDrawerOpen() {
if(mMenuPanel != null) {
return mMenuPanel.isDrawerOpen(mMenuPanel);
}
return false;
}
Однако, если вы дадите его самому как аргумент (который был бы избыточным в крайнем случае), вы получите следующую ошибку:
E/AndroidRuntime(11241): java.lang.ClassCastException:
android.widget.FrameLayout$LayoutParams cannot be cast to
android.support.v4.widget.DrawerLayout$LayoutParams
(что, как вы заметили, не дает вам никакой информации о том, что вы сделали неправильно, а скорее является симметром проблемы).
Другие ответы здесь или здесь либо непонятны, либо очень тесно связаны с вопросом без особого объяснения. Тем не менее я попытался добавить faux LinearLayout
или один из DrawerLayout
детей, и каждый из них дает эту ошибку:
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
Может ли кто-нибудь объяснить, что эти методы действительно должны были передать им для работы?