2014-10-30 59 views
3

嗨,我一直在创建一个实现滑动抽屉滑动抽屉的应用程序。但是,我一直收到标题上显示的错误。错误java.lang.runtimeexception视图不是滑动抽屉

日志:

10-30 15:38:20.510: E/AndroidRuntime(1863): FATAL EXCEPTION: main 
10-30 15:38:20.510: E/AndroidRuntime(1863): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mobextph.krispykreme/com.mobextph.krispykreme.ParentActivity}: java.lang.IllegalArgumentException: View android.widget.LinearLayout{5321e6b8 V.E..... ......ID 0,0-0,0 #7f090002 app:id/left_drawer} is not a sliding drawer 
10-30 15:38:20.510: E/AndroidRuntime(1863):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
10-30 15:38:20.510: E/AndroidRuntime(1863):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
10-30 15:38:20.510: E/AndroidRuntime(1863):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
10-30 15:38:20.510: E/AndroidRuntime(1863):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
10-30 15:38:20.510: E/AndroidRuntime(1863):  at android.os.Handler.dispatchMessage(Handler.java:99) 
10-30 15:38:20.510: E/AndroidRuntime(1863):  at android.os.Looper.loop(Looper.java:137) 
10-30 15:38:20.510: E/AndroidRuntime(1863):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
10-30 15:38:20.510: E/AndroidRuntime(1863):  at java.lang.reflect.Method.invokeNative(Native Method) 
10-30 15:38:20.510: E/AndroidRuntime(1863):  at java.lang.reflect.Method.invoke(Method.java:511) 
10-30 15:38:20.510: E/AndroidRuntime(1863):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
10-30 15:38:20.510: E/AndroidRuntime(1863):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
10-30 15:38:20.510: E/AndroidRuntime(1863):  at dalvik.system.NativeStart.main(Native Method) 
10-30 15:38:20.510: E/AndroidRuntime(1863): Caused by: java.lang.IllegalArgumentException: View android.widget.LinearLayout{5321e6b8 V.E..... ......ID 0,0-0,0 #7f090002 app:id/left_drawer} is not a sliding drawer 
10-30 15:38:20.510: E/AndroidRuntime(1863):  at android.support.v4.widget.DrawerLayout.closeDrawer(DrawerLayout.java:1170) 
10-30 15:38:20.510: E/AndroidRuntime(1863):  at com.mobextph.krispykreme.ParentActivity.changeFragment(ParentActivity.java:141) 
10-30 15:38:20.510: E/AndroidRuntime(1863):  at com.mobextph.krispykreme.ParentActivity.onCreate(ParentActivity.java:111) 
10-30 15:38:20.510: E/AndroidRuntime(1863):  at android.app.Activity.performCreate(Activity.java:5104) 
10-30 15:38:20.510: E/AndroidRuntime(1863):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
10-30 15:38:20.510: E/AndroidRuntime(1863):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 

主要活动类是:

package com.mobextph.krispykreme; 

import java.util.ArrayList; 

import com.mobextph.krispykreme.constants.Constants; 

import android.R.color; 
import android.content.res.Configuration; 
import android.graphics.Color; 
import android.graphics.drawable.ColorDrawable; 
import android.graphics.drawable.Drawable; 
import android.os.Bundle; 
import android.support.v4.app.ActionBarDrawerToggle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentTransaction; 
import android.support.v4.view.ViewPager; 
import android.support.v4.widget.DrawerLayout; 
import android.view.Gravity; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.LinearLayout; 
import android.widget.ListView; 



public class ParentActivity extends FragmentActivity { 

    private Fragment changedFragment= null; 
    private FragmentManager fm; 

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

    // nav drawer title 
    private CharSequence mDrawerTitle; 

    // used to store app title 
    private CharSequence mTitle; 

    // slide menu items 
    private String[] navMenuTitles; 

    private ArrayList<String> navDrawerItems; 
    private ArrayAdapter<String> adapter; 

    private String[] menuItem= {"ORDER", "STAMP CARD", "REWARDS", "STORES", "FAVORITES"}; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_main); 
//  Drawable d; 
//  getActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(android.R.color.transparent))); 
     /*Slider*/ 
     mTitle = mDrawerTitle = getTitle(); 
     navMenuTitles= menuItem; 

     mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
     mDrawerList = (ListView) findViewById(R.id.list_slidermenu); 
     linearLayout = (LinearLayout) findViewById(R.id.left_drawer); 

     mDrawerList.setAdapter(new ArrayAdapter<String>(this, R.layout.drawer_list_item, R.id.title, menuItem)); 

     mDrawerList.setOnItemClickListener(new SlideMenuClickListener()); 

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

     mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, 
       R.drawable.button_menu, //nav menu toggle icon 
       R.string.app_name, // nav drawer open - description for accessibility 
       R.string.app_name // nav drawer close - description for accessibility 
     ) { 
      public void onDrawerClosed(View view) { 
       getActionBar().setTitle(mTitle); 
       // calling onPrepareOptionsMenu() to show action bar icons 
       invalidateOptionsMenu(); 
      } 

      public void onDrawerOpened(View drawerView) { 
       getActionBar().setTitle(mDrawerTitle); 
       // calling onPrepareOptionsMenu() to hide action bar icons 
       invalidateOptionsMenu(); 
      } 
     }; 
     mDrawerLayout.setDrawerListener(mDrawerToggle); 

     if (savedInstanceState == null) { 
      // on first time display view for first nav item 
//   changeFragment(-1); 
     } 
     fm = getSupportFragmentManager(); 

//  DatabaseHandler db= new DatabaseHandler(this); 
//  
//  for(int i = 0; i < 2; i++){ 
//   db.insertFavorite(Constants.id[i], Constants.imageItem[i], 
//     Constants.title[i], Constants.price[i], Constants.desc[i], 
//     Constants.status[i]); 
//  } 

     changeFragment(-1); 
    } 

    public void changeFragment(int fragment){ 

     FragmentTransaction transaction = fm.beginTransaction(); 
     changedFragment = null; 

     switch(fragment){ 
     case -1: 
      changedFragment = new HomeFragment(); 
//   mDrawerLayout.closeDrawers(); 
      break; 
     case Constants.ORDER_SCREEN_CLICKED: 
      changedFragment = new OrderFragment(); 
      break; 
     case Constants.FAVORITES_SCREEN_CLICKED: 
      changedFragment = new FavoritesFragment(); 
      break; 
     } 

     if (changedFragment != null) { 
      transaction.replace(R.id.fragment_holder, changedFragment); 
      transaction 
        .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
      transaction.addToBackStack(null); 
      transaction.commit(); 

      mDrawerList.setItemChecked(fragment, true); 
      mDrawerList.setSelection(fragment); 
      mDrawerLayout.closeDrawer(linearLayout); 
     } 
    } 

    private class SlideMenuClickListener implements 
     ListView.OnItemClickListener { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, 
       long id) { 
      // display view for selected nav drawer item 
      int fragment = 0; 
      if(position == 0) 
       fragment= Constants.ORDER_SCREEN_CLICKED; 
      else if(position == 4) 
       fragment= Constants.FAVORITES_SCREEN_CLICKED; 

      changeFragment(fragment); 
     } 

    } 


// @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; 
// } 
// 
    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
//  int id = item.getItemId(); 
//  if (id == R.id.action_settings) { 
//   return true; 
//  } 
//  return super.onOptionsItemSelected(item); 
     if(mDrawerToggle.onOptionsItemSelected(item)) 
      return true; 

     switch(item.getItemId()){ 
      default: return super.onOptionsItemSelected(item); 
     } 
    } 


    /** 
    * When using the ActionBarDrawerToggle, you must call it during 
    * onPostCreate() and onConfigurationChanged()... 
    */ 

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

} 

示出用于滑动抽屉的线性布局和列表视图是视图代码:

<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/fragment_holder" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

    <LinearLayout 
     android:id="@+id/left_drawer" 
     android:layout_width="260dp" 
     android:layout_height="match_parent" 
     android:orientation="vertical" 
     android:background="#008265" 
     android:gravity= "left" > 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal"> 

      <ImageView 
       android:layout_width="0dip" 
       android:layout_height="wrap_content" 
       android:layout_weight="1" 
       android:src="@drawable/icon_login"/> 

      <TextView 
       android:layout_width="0dip" 
       android:layout_height="wrap_content" 
       android:layout_weight="1" 
       android:layout_gravity="center" 
       android:text="LOGIN" 
       android:textSize="15dp" 
       android:paddingLeft="5dp" 
       android:paddingRight="0dp"/> 

      <TextView 
       android:layout_width="0dip" 
       android:layout_height="wrap_content" 
       android:layout_weight="1" 
       android:layout_gravity="center" 
       android:text="|" 
       android:gravity="center" 
       android:textSize="15dp"/> 

      <TextView 
       android:layout_width="0dip" 
       android:layout_height="wrap_content" 
       android:layout_weight="1" 
       android:layout_gravity="center" 
       android:text="SIGN UP" 
       android:textSize="15dp" 
       android:paddingLeft="0dp" 
       android:paddingRight="5dp"/> 

     </LinearLayout> 

     <ListView 
      android:id="@+id/list_slidermenu" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_gravity="start" 
      android:choiceMode="singleChoice" 
      android:divider="@color/list_divider" 
      android:dividerHeight="1dp"   
      android:listSelector="@drawable/list_selector" 
      android:gravity= "left" /> 


    </LinearLayout> 


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

的就是你得到??发表您的logcat – micky 2014-10-30 07:58:37

回答

1

尝试设置

layout_gravity="start" or layout_gravity="left" 
在left_drawer而不是重力

+0

我仍然遇到同样的错误 – user2992771 2014-10-30 08:19:36

+0

HM单证说,你只需要重力设置为左或开始为布局错误是一个滑动视图。不知道为什么它仍然在那里抛出一个错误。 – maffelbaffel 2014-10-30 08:29:37