O que você precisa passar para v4.widget.DrawerLayout.isDrawerOpen () /. OpenDrawer () /. CloseDrawer ()

Eu tenho tentado mover meu código para oDrawerLayout como sugerido pelo androidAqui ComoSlidingDrawer está obsoleto.

Meu problema é que até agoraDrawerLayout parece ser muito mal implementado, tem mensagens de erro inúteis (sem programação defensiva) e / ou não é explicado suficientemente bem na documentação.

aisDrawerOpen() método é descritoAqui:

isDrawerOpen booleano público (View drawer)

Verifique se a visualização da gaveta fornecida está atualmente em estado aberto. Para ser considerada "aberta", a gaveta deve ter sido colocada em seu estado totalmente visível. Para verificar a visibilidade parcial, use isDrawerVisible (android.view.View).

Parâmetros: gaveta - Vista da gaveta para verificar

Retorna: true se a exibição da gaveta fornecida estiver em um estado aberto

Cada um dos métodosisDrawerOpen(View drawer), openDrawer(View drawer) ecloseDrawer(View drawer) não funciona quando passado:DrawerLayout em questão ou seja de seus filhos. Eu não tenho ideia do que devo alimentar nesses métodos para permitir que eles funcionem. Alguém pode me avisar?

Veja abaixo toda a descrição do problema com a implementação.

Eu tenho um layout assim:

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

E no meu código eu tenho o seguinte método ligado a um botão:

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

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

No entanto, se você der a si mesmo como um argumento (o que seria redundante ao extremo), você obterá o seguinte erro:

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

(O que você notará, não lhe dá nenhuma informação sobre o que você fez de errado. É, ao invés disso, um sintoma do problema).

Outras respostasAqui ouAqui são incompreensíveis ou intimamente ligados à questão sem muita explicação. Mesmo assim, eu tentei adicionar um falsoLinearLayout ou um dosDrawerLayouts crianças e cada um dáisto erro:

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

Alguém pode explicar o que esses métodosna realidade precisa ter passado para eles para trabalhar?

questionAnswers(4)

yourAnswerToTheQuestion