LinearLayout $ LayoutParams cannot be dropped to android.support.v4.widget.DrawerLayout $ LayoutParams

I am trying to make navigation box options.

Here is my xml:

<?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <Button android:id="@+id/sendnewmessages" android:layout_width="wrap_content" android:layout_height="30dp" android:background="@drawable/nothere" android:gravity="center_horizontal" android:shadowColor="@android:color/black" android:shadowDx="1" android:shadowDy="1" android:shadowRadius="1" android:text="Send New Messages" android:textAlignment="center" android:textColor="@android:color/black" /> <EditText android:id="@+id/searchmessage" android:layout_height="40dp" android:layout_width="200dp" android:gravity="center" android:hint="Search Messages"/> <ListView android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="wrap_content"> </ListView> <ListView android:id="@+id/left_drawer" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="start" android:choiceMode="singleChoice" android:divider="@android:color/transparent" android:dividerHeight="0dp" android:background="#111"/> </LinearLayout> </android.support.v4.widget.DrawerLayout> 

If I delete Linearlayout , there will be no error. This button appears behind the listview , edittext appears in the middle of the screen. The problem is that the objects are not aligned. Is there a way to align view objects in DrawerLayout ?

If I do not delete Linearlayout , I get this error:

 LinearLayout$LayoutParams cannot be cast to android.support.v4.widget.DrawerLayout$LayoutParams 

Stacktrace:

E / AndroidRuntime (3454): FATAL EXCEPTION: main Process: com.brilliant.bridge, PID: 3454 java.lang.ClassCastException: android.widget.LinearLayout $ LayoutParams cannot be dropped android.support.v4.widget.DrawerLayout $ LayoutParams on android .support.v4.widget.DrawerLayout.isDrawerView (DrawerLayout.java:910) in android.support.v4.widget.DrawerLayout.isDrawerOpen (DrawerLayout.java:1156) in com.brilliant.bridge.AdminMessages.onPrepareOptionsMenages (Menu : 220) in android.app.Activity.onPreparePanel (Activity.java:2556) in com.android.internal.policy.impl.PhoneWindow.preparePanel (PhoneWindow.java:464) in com.android.internal.policy.impl. PhoneWindow.doInvalidatePanelMenu (PhoneWindow.java:800) in com.android.internal.policy.impl.PhoneWindow $ 1.run (PhoneWindow.java:221) in android.view.Choreographer $ CallbackRecord.run (Choreographer.java:761) on android.view.Choreographer.doCallbacks (Choreographer .java: 574) on andr oid.view.Choreographer.doFrame (Choreographer .java: 543) on android.view.Choreographer $ FrameDisplayEventReceiver.run (Choreographer.java:747) on android.os.Handler.handleCallback (Handler.java:733) at android.os .Handler.dispatchMessage (Handler.java:95) at android.os.Looper.loop (Looper.java:136) in android.app.ActivityThread.main (ActivityThread.javaβˆ—017) in java.lang.reflect.Method. invokeNative (native method) in java.lang.reflect.Method.invoke (Method.javahaps1515) in com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:779) on com.android.internal. os.ZygoteInit.main (ZygoteInit.java=95) at dalvik.system.NativeStart.main (native method)

 public boolean onPrepareOptionsMenu(Menu menu) { boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList); menu.findItem(R.id.action_websearch).setVisible(!drawerOpen); return super.onPrepareOptionsMenu(menu); } 
+6
source share
1 answer

Assign the LinearLayout identifier in the XML file:

 <LinearLayout android:id="@+id/DrawerLinear" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <!-- YOUR LISTVIEW IS HERE --> </LinearLayout> 

Then in your java class, run this LinearLayout:

 private LinearLayout DrawerLinear; 

In OnCreate you should do this:

 DrawerLinear = (LinearLayout) findViewById(R.id.DrawerLinear); 

And in your onPrepareOptionMenu, put this:

 public boolean onPrepareOptionsMenu(Menu menu) { boolean drawerOpen = mDrawerLayout.isDrawerOpen(DrawerLinear); menu.findItem(R.id.action_websearch).setVisible(!drawerOpen); return super.onPrepareOptionsMenu(menu); } 

he should solve your problem.

+10
source

Source: https://habr.com/ru/post/970087/


All Articles