导航抽屉中的LinearLayout
我想要在导航抽屉中放置底部ListView的TextView。 抛出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>
和java代码:
// 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);
我发现了一些相关的主题,但对我没有帮助
Hoorray! 我在我的代码中发现问题。 在函数selectItem中需要更改mDrawerLayout.closeDrawer(mDrawerList);
到mDrawerLayout.closeDrawer(mDrawerLinear);
现在它完美的工作! 谢谢大家
我试着用你提供的代码在我身边试试,并做了一些修改。 请检查它是否可以帮助你..
activity_main.xml文件
<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>
和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;
}
}
如果您使用Eclipse,请尝试执行Project->Clean
。
另外,从xml中的FrameLayout
定义中删除xmlns:android="http://schemas.android.com/apk/res/android
属性,因为它不是必需的。