Я пытался переместить свой код на 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
(Что, как вы заметите, не дает вам никакой информации о том, что вы сделали неправильно. Вместо этого это симптом проблемы).
Другие ответы здесь или здесь либо непонятны, либо очень тесно связаны с вопросом без особых объяснений. Несмотря на это, я пытался добавить поддельный LinearLayout
или один из дочерних элементов DrawerLayout
s, и каждый из них выдавал эту ошибку:
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
Кто-нибудь может объяснить, что эти методы на самом деле должны были передать им, чтобы они работали?