Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

LinearLayout in navigation drawer

I want place TextView of bottom ListView in navigation drawer. Throws java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams cannot be cast to android.support.v4.widget.DrawerLayout$LayoutParams

main.xml

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

    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="0dp"
        android:paddingBottom="4dp"
    />

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:id="@+id/left_drawer"
        android:layout_gravity="start"
        >

        <ListView
            android:id="@+id/left_menu"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:choiceMode="singleChoice"
            android:dividerHeight="0.1dp"
            android:background="#111"
            android:divider="#FFF"
            />

        <TextView
            android:id="@+id/joke_text1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:textSize="16sp"
            android:lineSpacingExtra="5sp"
            android:text="AAAAAA"
            />
    </LinearLayout>

</android.support.v4.widget.DrawerLayout>

and java code:

// Getting reference to the DrawerLayout
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerLinear = (LinearLayout) findViewById(R.id.left_drawer);

leftMenuItems = getResources().getStringArray(R.array.leftMenuItems);

mDrawerList = (ListView) findViewById(R.id.left_menu);
mDrawerList.setOnItemClickListener(new DrawerItemClickListener());

// set a custom shadow that overlays the main content when the drawer opens
mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);

// Generate title
String[] title = new String[] { "item1", "item2", "item4", "item4" };

// Generate icon
int[] icon = new int[] { R.drawable.abc_ic_clear, R.drawable.abc_ic_clear,
        R.drawable.abc_ic_clear, R.drawable.abc_ic_clear };


MenuListAdapter adapter = new MenuListAdapter(this, title, icon);

// Setting the adapter on mDrawerList
mDrawerList.setAdapter(adapter);

// Getting reference to the ActionBarDrawerToggle
mDrawerToggle = new ActionBarDrawerToggle(
        this,
        mDrawerLayout,
        R.drawable.ic_drawer,
        R.string.drawer_open,
        R.string.drawer_close) {

    public void onDrawerOpened(View drawerView) {
        vstitle.setText("Menu");
        invalidateOptionsMenu();
    }

    public void onDrawerClosed(View view) {
        vstitle.setText("App");
        invalidateOptionsMenu();
    }


};

// Setting DrawerToggle on DrawerLayout
mDrawerLayout.setDrawerListener(mDrawerToggle);

I found some related topics, but it's not helpful for me

  1. How to put list items at the bottom of list view in Navigation Drawer like Foursquare
  2. Adding a linear layout to Navigation drawer (ends up crashing with a ClassCastException)
like image 565
LONGMAN Avatar asked Feb 16 '14 11:02

LONGMAN


People also ask

What is the use of LinearLayout?

LinearLayout is a view group that aligns all children in a single direction, vertically or horizontally. You can specify the layout direction with the android:orientation attribute. Note: For better performance and tooling support, you should instead build your layout with ConstraintLayout.

Can we use LinearLayout in ConstraintLayout?

Most of what can be achieved in LinearLayout and RelativeLayout can be done in ConstraintLayout. However, learning the basics of LinearLayout and RelativeLayout is important before trying to understand how to use it with ConstraintLayout.


2 Answers

Hoorray! I found problem in my code. In function selectItem need change mDrawerLayout.closeDrawer(mDrawerList); to mDrawerLayout.closeDrawer(mDrawerLinear); Now it works perfectly! Thanks to all

like image 194
LONGMAN Avatar answered Oct 02 '22 06:10

LONGMAN


I try sample on my side with your provide code and did some modicatons . please check this if it might help you ..

activity_main.xml file

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/content_frame"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="4dp"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="0dp" />

<LinearLayout
    android:id="@+id/left_drawer"
    android:layout_width="240dp"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/left_menu"
        android:layout_width="match_parent"
        android:layout_height="300dip"
        android:background="#111"
        android:choiceMode="singleChoice"
        android:divider="#FFF"
        android:dividerHeight="0.1dp" />

    <TextView
        android:id="@+id/joke_text1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:lineSpacingExtra="5sp"
        android:text="AAAAAA"
        android:textColor="@android:color/white"
        android:textSize="16sp" />
</LinearLayout>

and MainActivity.java

package com.example.navdrawer;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.view.Menu;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;

public class MainActivity extends Activity {
private DrawerLayout mDrawerLayout;
private LinearLayout mDrawerLinear;
private ListView mDrawerList;
private ActionBarDrawerToggle mDrawerToggle;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);



    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mDrawerLinear = (LinearLayout) findViewById(R.id.left_drawer);

    //leftMenuItems = getResources().getStringArray(R.array.leftMenuItems);

    mDrawerList = (ListView) findViewById(R.id.left_menu);
    //mDrawerList.setOnItemClickListener(new DrawerItemClickListener());

    // set a custom shadow that overlays the main content when the drawer opens
    //mDrawerLayout.setDrawerShadow(R.drawable.ic_launcher, GravityCompat.START);

    // Generate title
    String[] title = new String[] { "item1", "item2", "item4", "item4" };

    // Generate icon
    int[] icon = new int[] { R.drawable.ic_launcher, R.drawable.ic_launcher,
            R.drawable.ic_launcher, R.drawable.ic_launcher };


    ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,
        android.R.layout.simple_spinner_item, title);



    //MenuListAdapter adapter = new MenuListAdapter(this, title, icon);

    // Setting the adapter on mDrawerList
    mDrawerList.setAdapter(dataAdapter);

    // Getting reference to the ActionBarDrawerToggle
    mDrawerToggle = new ActionBarDrawerToggle(
            this,
            mDrawerLayout,
            R.drawable.ic_launcher,
            R.drawable.ic_launcher,
            R.drawable.ic_launcher) {

        @SuppressLint("NewApi")
        public void onDrawerOpened(View drawerView) {
         //   vstitle.setText("Menu");
            invalidateOptionsMenu();
        }

        @SuppressLint("NewApi")
        public void onDrawerClosed(View view) {
          //  vstitle.setText("App");
            invalidateOptionsMenu();
        }


    };

    // Setting DrawerToggle on DrawerLayout
    mDrawerLayout.setDrawerListener(mDrawerToggle);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

}
like image 38
EminenT Avatar answered Oct 02 '22 04:10

EminenT