Android 导航抽屉xml错误

Android 导航抽屉xml错误,android,xml,navigation-drawer,Android,Xml,Navigation Drawer,亲爱的飞越者: 我在活动中使用导航抽屉,以下是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" >

亲爱的飞越者:

我在活动中使用导航抽屉,以下是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
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <FrameLayout
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="#3a3a3c" >

        <ImageView
            android:id="@+id/ImageView01"
            android:layout_width="240dp"
            android:layout_height="10dp"
            android:layout_marginTop="20dp"
            android:src="@drawable/border" />

        <TextView
            android:id="@+id/tvretailers"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="0dp"
            android:text="Retailers"
            android:textColor="#ffffff"
            android:textSize="20sp" />

        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="240dp"
            android:layout_height="10dp"
            android:layout_marginTop="300dp"
            android:src="@drawable/border" />

        <ListView
            android:id="@+id/right_drawer_settings"
            android:layout_width="wrap_content"
            android:layout_height="250dp"
            android:layout_marginTop="310dp"
            android:background="#3a3a3c" >
        </ListView>

        <TextView
            android:id="@+id/TextView01"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="280dp"
            android:text="Settings"
            android:textColor="#ffffff"
            android:textSize="20sp" />

        <ListView
            android:id="@+id/right_drawer_retailers"
            android:layout_width="wrap_content"
            android:layout_height="200dp"
            android:layout_marginTop="30dp"
            android:background="#3a3a3c" >
        </ListView>
    </FrameLayout>

</android.support.v4.widget.DrawerLayout>
以前,我在FrameLayout中只有一个listview,它工作正常,但经过一些修改后,我无法让它工作!希望你能帮忙!非常感谢stackoverflowers=)

全部代码:

public class LebanonDrawer extends SherlockFragmentActivity {
    DrawerLayout mDrawerLayout;
    ListView mDrawerList;
    ActionBarDrawerToggle mDrawerToggle;
    String[] title;
    String[] subtitle;
    int[] icon;
    Fragment Lebanon = new Lebanon();

    @SuppressWarnings("unchecked")
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.drawer_main);

        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mDrawerList = (ListView) findViewById(R.id.right_drawer_retailers);
        String[] songsArray = { "Do", "RE", "MI", "FA", "SO", "LA", "SO" };
        MenuListAdapter mla = new MenuListAdapter(this, songsArray);
        mDrawerList.setAdapter(mla);

        mDrawerList.setOnItemClickListener(new DrawerItemClickListener());

        getSupportActionBar().setHomeButtonEnabled(true);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
                R.drawable.ic_drawer, R.string.drawer_open,
                R.string.drawer_close) {

            public void onDrawerClosed(View view) {
                // TODO Auto-generated method stub
                super.onDrawerClosed(view);
            }

            public void onDrawerOpened(View drawerView) {
                // TODO Auto-generated method stub
                super.onDrawerOpened(drawerView);
            }
        };

        mDrawerLayout.setDrawerListener(mDrawerToggle);

        if (savedInstanceState == null) {
            selectItem(0);
        }
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        if (item.getItemId() == android.R.id.home) {

            if (mDrawerLayout.isDrawerOpen(mDrawerList)) {
                mDrawerLayout.closeDrawer(mDrawerList);
            } else {
                mDrawerLayout.openDrawer(mDrawerList);
            }
        }

        return super.onOptionsItemSelected(item);
    }

    private class DrawerItemClickListener implements
            ListView.OnItemClickListener {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                long id) {
            selectItem(position);
        }
    }

    private void selectItem(int position) {

        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        // Locate Position
        switch (position) {
        case 0:
            ft.replace(R.id.content_frame, Lebanon);
            break;

        }
        ft.commit();
        mDrawerList.setItemChecked(position, true);
        // Close drawer
        mDrawerLayout.closeDrawer(mDrawerList);
    }

    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        // Sync the toggle state after onRestoreInstanceState has occurred.
        mDrawerToggle.syncState();
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        // Pass any configuration change to the drawer toggles
        mDrawerToggle.onConfigurationChanged(newConfig);
    }
}
公共类LebanonDrawer扩展SherlockFragmentActivity{
抽屉布局mDrawerLayout;
ListView mDrawerList;
ActionBarDrawerToggle mDrawerToggle;
字符串[]标题;
字符串[]副标题;
int[]图标;
碎片黎巴嫩=新黎巴嫩();
@抑制警告(“未选中”)
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(右布局,抽屉主视图);
mDrawerLayout=(抽屉布局)findViewById(R.id.抽屉布局);
mDrawerList=(ListView)findViewById(R.id.right\u drawer\u retailers);
String[]songsArray={“Do”、“RE”、“MI”、“FA”、“SO”、“LA”、“SO”};
MenuListAdapter mla=新的MenuListAdapter(这是songsArray);
mDrawerList.setAdapter(mla);
setOnItemClickListener(新的DrawerItemClickListener());
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
mDrawerToggle=新操作BarDrawerToggle(此,mDrawerLayout,
R.drawable.ic_抽屉,R.string.drawer_抽屉打开,
右弦抽屉(U关闭){
公共无效onDrawerClosed(视图){
//TODO自动生成的方法存根
super.onDrawerClosed(视图);
}
打开图纸上的公共空白(视图抽屉视图){
//TODO自动生成的方法存根
super.onDrawerOpened(抽屉视图);
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
如果(savedInstanceState==null){
选择项目(0);
}
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
if(item.getItemId()==android.R.id.home){
if(mDrawerLayout.isDrawerOpen(mDrawerList)){
mDrawerLayout.closeDrawer(mDrawerList);
}否则{
mDrawerLayout.openDrawer(mDrawerList);
}
}
返回super.onOptionsItemSelected(项目);
}
私有类DrawerItemClickListener实现
ListView.com侦听器{
@凌驾
public void onItemClick(AdapterView父视图、视图、整型位置、,
长id){
选择项目(位置);
}
}
私有void selectItem(内部位置){
FragmentTransaction ft=getSupportFragmentManager().beginTransaction();
//定位
开关(位置){
案例0:
ft.replace(R.id.content_框架,黎巴嫩);
打破
}
ft.commit();
mDrawerList.setItemChecked(位置,true);
//封闭抽屉
mDrawerLayout.closeDrawer(mDrawerList);
}
@凌驾
后期创建时受保护的空(捆绑包savedInstanceState){
super.onPostCreate(savedInstanceState);
//在onRestoreInstanceState发生后同步切换状态。
mDrawerToggle.syncState();
}
@凌驾
公共无效OnConfiguration已更改(配置newConfig){
super.onConfigurationChanged(newConfig);
//将任何配置更改传递给抽屉开关
mDrawerToggle.onConfigurationChanged(newConfig);
}
}
在xml布局中,
mDrawerList
不是
DrawerLayout
的直接后代。相反,它是正在使用其LayoutParams的
FrameLayout
的后代

在当前设置中,为保存ListView的FrameLayout分配一个id,在“活动”中找到它,然后在以下位置使用它:

mDrawerLayout.openDrawer(frameHoldingListView);

如果有人在使用工具栏时遇到类似问题,请对mDrawerLayout.closeDrawer(…)和mDrawerLayout.isDrawerOpen(…)进行类似的更改。

mDrawerLayout.openDrawer(mDrawerLayout); 
通过在developer.android.com上进行培训

尝试:

要节省大量搜索异常解决方案的时间,请执行以下操作:

java.lang.ClassCastException: android.widget.FrameLayout$LayoutParams 
                   cannot be cast to android.support.v4.widget.DrawerLayout$LayoutParams

保存并清理项目。问题将消失。@vikram不起作用,我甚至尝试以空结果重新启动eclipse。@KingOmar LebanonDrawer.java的第104行和第63行有什么内容?第61-64行:if(savedInstanceState==null){selectItem(0);}第104行:mDrawerLayout.closeDrawer(mDrawerList);好的,按你说的做了:08-18 02:15:30.211:E/AndroidRuntime(32358):java.lang.RuntimeException:无法启动活动组件信息{com.androidarabia.phones/com.androidarabia.lebanondarawer}:java.lang.ClassCastException:android.widget.FrameLayout$LayoutParams不能强制转换为android.support.v4.widget.DrawerLayout$LayoutParams太棒了!我忘了我正在使用FrameLayout。谢谢你的支持。
mDrawerLayout.openDrawer(mDrawerLayout); 
mDrawerLayout.openDrawer(Gravity.LEFT); 
java.lang.ClassCastException: android.widget.FrameLayout$LayoutParams 
                   cannot be cast to android.support.v4.widget.DrawerLayout$LayoutParams