java - Android 抽屉式导航错误

标签 java 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"
    android:background="#ffffff" >

    <!-- Framelayout to display Fragments -->

    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <!-- Listview to display slider menu -->

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

        <LinearLayout
            android:id="@+id/drawers"
            android:layout_width="240dp"
            android:layout_height="wrap_content"
            android:layout_gravity="start"
            android:background="@color/REDAR_COLOR"
            android:gravity="center_vertical"
            android:orientation="horizontal" >

            <ImageView
                android:layout_width="80dp"
                android:layout_height="80dp"
                android:paddingLeft="20dp"
                android:src="@drawable/ic_launcher" />

            <LinearLayout
                android:id="@+id/drawer"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"
                android:background="@color/REDAR_COLOR"
                android:orientation="vertical" >

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:gravity="center"
                    android:text="Shohel Rana"
                    android:textSize="14sp" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="5dp"
                    android:gravity="center"
                    android:text="test@gmail.com"
                    android:textSize="14sp" />
            </LinearLayout>
        </LinearLayout>

        <ListView android:id="@+id/left_drawer"
            android:layout_width="240dp"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:choiceMode="singleChoice"
            android:divider="@android:color/transparent"
            android:dividerHeight="0dp"
            android:background="#fff"/>
    </LinearLayout>

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

还有我的 java 类:

private DrawerLayout mDrawerLayout;
    private ListView mDrawerList;
    private ActionBarDrawerToggle mDrawerToggle;

    private CharSequence mDrawerTitle;
    private CharSequence mTitle;
    private String[] nav_options;

    private int restaurant_user_id = 0;
    int position= 0;

    public static drawer_menu drawer_menu_activity;
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);


            setContentView(R.layout.drawer_menu);

            drawer_menu_activity = this;


            getActionBar().setDisplayHomeAsUpEnabled(true);
            getActionBar().setHomeButtonEnabled(true);


            nav_options = getResources().getStringArray(R.array.nav_options);
            mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
            mDrawerList = (ListView) findViewById(R.id.left_drawer);

            // Set the adapter for the list view
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, nav_options);

            mDrawerList.setAdapter(adapter);

            // Set the list's click listener
            mDrawerList.setOnItemClickListener(new DrawerItemClickListener());

            position = 1;

            selectItem(position,restaurant_user_id);


            mDrawerToggle = new ActionBarDrawerToggle(
                    this,                  /* host Activity */
                    mDrawerLayout,         /* DrawerLayout object */
                    R.drawable.ic_drawer,  /* nav drawer icon to replace 'Up' caret */
                    R.string.hello_world,  /* "open drawer" description */
                    R.string.hello_world  /* "close drawer" description */
            ) {

                /** Called when a drawer has settled in a completely closed state. */
                public void onDrawerClosed(View view) {
                    super.onDrawerClosed(view);
                    invalidateOptionsMenu();
                }

                /** Called when a drawer has settled in a completely open state. */
                public void onDrawerOpened(View drawerView) {
                    super.onDrawerOpened(drawerView);
                    invalidateOptionsMenu();
                }
            };

        }

        @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);
            mDrawerToggle.onConfigurationChanged(newConfig);
        }


        /* The click listner for ListView in the navigation drawer */
        private class DrawerItemClickListener implements ListView.OnItemClickListener {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                selectItem(position,restaurant_user_id);

            }
        }

        private void selectItem(int position, int restaurant_user_id) {


            mDrawerLayout.closeDrawers();

            Bundle args = new Bundle();
            args.putInt("restaurant_user_id", restaurant_user_id);
            args.putString("WEB_URL", WEB_URL);

            switch (position){
                case 0:
                    Log.v("POSITION" , "ES 0");
                    position=0;
                    Fragment main= new main();
                    main.setArguments(args);
                    FragmentManager fragmentManager_main = getFragmentManager();
                    fragmentManager_main.beginTransaction().replace(R.id.content_frame, main).commit();
                    break;
                case 1:
                    Log.v("POSITION" , "ES 1");
                    position=1;
                    Fragment detail = new comments();
                    detail.setArguments(args);
                    FragmentManager fragmentManager = getFragmentManager();
                    fragmentManager.beginTransaction().replace(R.id.content_frame, detail).commit();
                    break;
            }

        }

  @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                mDrawerLayout.openDrawer(mDrawerList);
                mDrawerLayout.invalidate();
                return true;
            default: return super.onOptionsItemSelected(item);
        }
    }

控制台日志是

11-11 09:42:00.414  10471-10471/mx.clai.redar.redarmanager E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams cannot be cast to android.support.v4.widget.DrawerLayout$LayoutParams
            at android.support.v4.widget.DrawerLayout.isDrawerView(DrawerLayout.java:968)
            at android.support.v4.widget.DrawerLayout.openDrawer(DrawerLayout.java:1129)
            at mx.clai.redar.redarmanager.drawer_menu.onOptionsItemSelected(drawer_menu.java:204)
            at android.app.Activity.onMenuItemSelected(Activity.java:2610)
            at com.android.internal.widget.ActionBarView$3.onClick(ActionBarView.java:243)
            at android.view.View.performClick(View.java:4421)
            at android.view.View$PerformClick.run(View.java:18190)
            at android.os.Handler.handleCallback(Handler.java:725)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:175)
            at android.app.ActivityThread.main(ActivityThread.java:5279)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
            at dalvik.system.NativeStart.main(Native Method)

控制台市场抽屉_菜单.java:204是:

`mDrawerLayout.openDrawer(mDrawerList);`

请帮忙,问候!

最佳答案

尝试更改您的 onOptionsItemSelected 方法:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Pass the event to ActionBarDrawerToggle, if it returns
    // true, then it has handled the app icon touch event
    if (mDrawerToggle.onOptionsItemSelected(item)) {
        return true;
    }
    // Handle your other action bar items...

    return super.onOptionsItemSelected(item);
}

这应该有效。

关于java - Android 抽屉式导航错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26868858/

相关文章:

java - onSuccess/onFailure 可以替代 vert.x 中 CompositeFuture 的 setHandler 吗?

android - 使用 AsyncTask 填充图像的 GridView 时滚动缓慢

java - 如何在 Apache Commons 配置中使用 addProperty() 将新的 XML 元素添加到分层 XML 配置的根元素?

android - 工具栏与状态栏重叠

java - Eclipse 强制执行严格的 Java 代码格式

java - Queue Worker Thread停止工作,线程安全问题?

java - java中的 keystore 密码加密

java - Android:类中的 SharedPreferences PreferenceManager.getDefaultSharedPreferences

java - Android - 当前正在运行的 Activity

java - 为多模块项目设置 Sonar Runner + cobertura