LinearLayout in the navigation box

I want to place the TextView of the bottom ListView in the navigation box. 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 that didn't help me

  • How to put list items at the bottom of a list in Navigation Drawer, like Foursquare .
  • Adding a linear layout to the navigation box (ends with the ClassCastException class)
+7
java android android-layout
source share
3 answers

Hoorray! I found a problem in my code. In the selectItem function, you must change mDrawerLayout.closeDrawer(mDrawerList); on mDrawerLayout.closeDrawer(mDrawerLinear); Now it works great! Thanks everyone

+5
source share

I try an example on my side with the code of your code and made some modifiers. Please check this if this can 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; } } 
+2
source share

If you are using Eclipse try Project->Clean .

Also, remove the xmlns:android="http://schemas.android.com/apk/res/android attribute from the FrameLayout definition in xml, as this is optional.

-3
source share

All Articles