私は非推奨であるため、ここでアンドロイドDrawerLayout
が提案するように自分のコードを移動しようとしています。SlidingDrawer
私の問題は、これまでのところDrawerLayout
、実装が非常に悪いか、役に立たないエラーメッセージが表示されているか (防御的なプログラミングがない)、ドキュメントで十分に説明されていないように見えることです。
isDrawerOpen()
メソッドはここで説明されています:
public boolean isDrawerOpen (ドロワーを表示)
指定されたドロワー ビューが現在開いている状態かどうかを確認します。「開いている」と見なされるには、引き出しが完全に見える状態になっている必要があります。部分的な可視性を確認するには、isDrawerVisible(android.view.View) を使用します。
パラメータ: drawer - チェックする引き出しビュー
指定されたドロワー ビューが開いている場合は 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
これらのメソッドが実際に機能するために何を渡す必要があるかを誰かが説明できますか?