Adding a linear layout to Navigation drawer (ends up crashing with a ClassCastException)

后端 未结 5 1455
遇见更好的自我
遇见更好的自我 2020-12-10 07:06

I am trying to add a vertical linear layout (having a title, image, menu title, listview and an icon at the bottom)to the navigation drawer. However the app crashes displayi

相关标签:
5条回答
  • 2020-12-10 07:27

    This error is coming because of wrong import. Add a proper import for Layout params.

    This import "android.widget.LinearLayout.LayoutParams" is getting mixed with Drawerlayout library declaration of LayoutParams ie "android.support.v4.widget.DrawerLayout$LayoutParams" resulting in ClassCast excption.

    0 讨论(0)
  • 2020-12-10 07:34

    do 2 things:

    1. set gravity="START" to linearlayout not listview as LinearLayout is now drawer.
    2. at the time of closing the drawer call drawer.close(Gravity.START); don't pass listView object here.
    0 讨论(0)
  • 2020-12-10 07:43

    Your query is difficult to understand without code & stacktrace, but anyway..

    Remember android.support.v4.widget.DrawerLayout can have 3 elements only (in exactly this order):

    1. Your main page

    2. Left Drawer

    3. Right Drawer

    Copy paste this example(only first two elements are there) & continue with your requirements

    <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" >
    
    <!-- Your main screen -->
    
    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >
    
        <RelativeLayout
            android:id="@+id/topRL"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="#DE6D53"
            android:orientation="horizontal" >
    
            <ImageButton
                android:id="@+id/left_drawer_button"
                android:layout_width="30dp"
                android:layout_height="30dp"
                android:layout_alignParentLeft="true"
                android:layout_centerVertical="true"
                android:gravity="center_vertical"
                android:onClick="onOpenLeftDrawer"
                android:src="@drawable/ic_launcher" />
    
        </RelativeLayout>
    
        <FrameLayout
            android:id="@+id/frame_to_be_replaced"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@+id/topRL" />
    </RelativeLayout>
    
    <!-- left drawer -->
    
    <RelativeLayout
        android:id="@+id/whatYouWantInLeftDrawer"
        android:layout_width="290dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="@android:color/black" >
    
        <TextView
            android:id="@+id/textView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="title"
            android:textColor="@android:color/white" />
    
        <ListView
            android:id="@+id/left_expandableListView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="start" />
    
        <TextView
            android:layout_width="25dp"
            android:layout_height="25dp"
            android:layout_alignParentBottom="true"
            android:textColor="@android:color/white"
            android:text="bottom" />
    </RelativeLayout>
    
    </android.support.v4.widget.DrawerLayout>
    

    Your Activity:

    public class MainActivity extends Activity {
    RelativeLayout leftRL;
    RelativeLayout rightRL;
    DrawerLayout drawerLayout;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    //        I'm removing the ActionBar.
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.temp);
    
        leftRL = (RelativeLayout)findViewById(R.id.whatYouWantInLeftDrawer);
        drawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout);
        }
    
        public  void onOpenLeftDrawer(View view)
        {
        drawerLayout.openDrawer(leftRL);
        }
    }
    
    0 讨论(0)
  • 2020-12-10 07:43

    I got the solution using your answers, thanks :). Actually the issue was with the list view. I was getting the linear layout on the left drawer, however it wasnt displayed properly as I added a scroll View to my linear layout and I also had a list in the same view which displayed only the first item in the list leaving the entire screen space blank. I checked few links to get the answer but it didn't work. At the end, since the list data is known to me and it will not change dynamically I added RadioButtons, customized them and replaced the list.

    My code looks like below now.

    <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"
    android:background="@color/app_background" >
    
    <!-- The main context view -->
    
    <FrameLayout
        android:id="@+id/fragment_holder"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    
    <!-- The navigation drawer -->
    
    <ScrollView
        android:id="@+id/leftDrawer"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="#fff" >
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp"
                android:layout_marginTop="10dp"
                android:paddingBottom="3dp"
                android:src="@drawable/ic_launcher"
                android:text="@string/menu_account"
                android:textColor="@color/nav_headingsColor"
                android:textStyle="bold" />
    
            <View
                android:layout_width="fill_parent"
                android:layout_height="2dip"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp"
                android:background="@color/nav_headingsColor" />
    
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp"
                android:orientation="horizontal" >
    
                <ImageView
                    android:id="@+id/imgProfilePic"
                    android:layout_width="0dp"
                    android:layout_height="70dp"
                    android:layout_weight="3"
                    android:scaleType="fitXY"
                    android:src="@drawable/ic_launcher" />
    
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal" >
    
                    <ImageView
                        android:id="@+id/imgProfilePic"
                        android:layout_width="0dp"
                        android:layout_height="70dp"
                        android:layout_weight="3"
                        android:clickable="true"
                        android:contentDescription="@null"
                        android:scaleType="fitXY"
                        android:src="@drawable/ic_launcher" />
    
                    <LinearLayout
                        android:layout_width="0dp"
                        android:layout_height="match_parent"
                        android:layout_weight="7"
                        android:gravity="center"
                        android:orientation="vertical"
                        android:padding="5dp" >
    
                        <TextView
                            android:id="@+id/lblName"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:text="Christian Bale"
                            android:textColor="@color/nav_textColor"
                            android:textSize="18sp" />
    
                        <TextView
                            android:id="@+id/lblEmail"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:text="christianbale@imhot.com"
                            android:textColor="@color/nav_textColor"
                            android:textSize="10sp" />
                    </LinearLayout>
                </LinearLayout>
            </LinearLayout>
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp"
                android:layout_marginTop="20dp"
                android:paddingBottom="3dp"
                android:src="@drawable/ic_launcher"
                android:text="@string/menu_menu"
                android:textColor="@color/nav_headingsColor"
                android:textStyle="bold" />
    
            <View
                android:layout_width="fill_parent"
                android:layout_height="2dip"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp"
                android:background="@color/nav_headingsColor" />
    
            <RadioGroup
                android:id="@+id/radioGroup"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginRight="5dip"
                android:layout_marginTop="2dip" >
    
                <RadioButton
                    android:id="@+id/radioTopTen"
                    style="@style/RadioButton"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:drawableLeft="@drawable/ic_launcher"
                    android:paddingLeft="20dp"
                    android:text="@string/menu_topTen" />
    
                <View
                    android:layout_width="fill_parent"
                    android:layout_height="1dip"
                    android:background="@color/nav_itemSep" />
    
                <RadioButton
                    android:id="@+id/radioWish"
                    style="@style/RadioButton"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:drawableLeft="@drawable/ic_launcher"
                    android:paddingLeft="20dp"
                    android:text="@string/menu_wish" />
    
                <View
                    android:layout_width="fill_parent"
                    android:layout_height="1dip"
                    android:background="@color/nav_itemSep" />
    
                <RadioButton
                    android:id="@+id/radioGifts"
                    style="@style/RadioButton"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:drawableLeft="@drawable/ic_launcher"
                    android:paddingLeft="20dp"
                    android:text="@string/menu_gifts" />
    
                <View
                    android:layout_width="fill_parent"
                    android:layout_height="1dip"
                    android:background="@color/nav_itemSep" />
    
                <RadioButton
                    android:id="@+id/radioLibrary"
                    style="@style/RadioButton"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:drawableLeft="@drawable/ic_launcher"
                    android:paddingLeft="20dp"
                    android:text="@string/menu_library" />
    
                <View
                    android:layout_width="fill_parent"
                    android:layout_height="1dip"
                    android:background="@color/nav_itemSep" />
    
                <RadioButton
                    android:id="@+id/radioWhatsOn"
                    style="@style/RadioButton"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:drawableLeft="@drawable/ic_launcher"
                    android:paddingLeft="20dp"
                    android:text="@string/menu_whatsOn" />
    
                <View
                    android:layout_width="fill_parent"
                    android:layout_height="1dip"
                    android:background="@color/nav_itemSep" />
    
                <RadioButton
                    android:id="@+id/radioDownload"
                    style="@style/RadioButton"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:drawableLeft="@drawable/ic_launcher"
                    android:paddingLeft="20dp"
                    android:text="@string/menu_download" />
            </RadioGroup>
    
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_marginTop="40dp"
                android:padding="10dp"
                android:src="@drawable/footer_image" />
        </LinearLayout>
    </ScrollView>
    

    I know this might not be the best possibility but at least its working for me. If any one has a better solution, then please let me know.

    0 讨论(0)
  • 2020-12-10 07:47

    Try doing this,

    In function selectItem, change mDrawerLayout.closeDrawer(mDrawerList); to mDrawerLayout.closeDrawer(mDrawerLinear); Should work perfectly fine.

    Because, the reference should now be your linearLayout, its no longer the listview that you are closing or opening.

    0 讨论(0)
提交回复
热议问题