导航抽屉中的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);

我发现了一些相关的主题,但对我没有帮助

  • 如何将列表项目放在导航抽屉中列表视图的底部,如Foursquare
  • 将线性布局添加到导航抽屉中(最终会因ClassCastException而崩溃)

  • 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属性,因为它不是必需的。

    链接地址: http://www.djcxy.com/p/77483.html

    上一篇: LinearLayout in navigation drawer

    下一篇: handling unicode text with werkzeug?