2014-10-08 57 views
0

我想使用DrawerLayout但没有ListView,我得到一个错误。我想在抽屉里有5个带有文字的图标。我正在使用LinearLayout和gridview来获取它。DrawViewLayout Gridview和LinearLayout

以下是错误

10-08 10:56:39.358: E/AndroidRuntime(17875): Caused by: java.lang.IllegalArgumentException: View android.widget.LinearLayout{42059670 V.E..... ......ID 0,0-0,0 #7f050044 app:id/drawer_linearlayout} is not a sliding drawer 

MenuActivity.java

import java.util.ArrayList; 
import java.util.List; 

import android.app.ActionBar; 
import android.app.Activity; 
import android.app.Fragment; 
import android.app.FragmentManager; 
import android.content.res.Configuration; 
import android.os.Bundle; 
import android.support.v4.app.ActionBarDrawerToggle; 
import android.support.v4.widget.DrawerLayout; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.GridView; 
import android.widget.LinearLayout; 
import android.widget.ListView; 

import com.codewell.unltd.mk.dramskiteatarskopje.R; 
import com.codewell.unltd.mk.dramskiteater.adapter.DrawerAdapter; 
import com.codewell.unltd.mk.dramskiteater.adapter.GridGalleryAdapter; 
import com.codewell.unltd.mk.dramskiteater.datamodel.DrawerItem; 

public class MenuActivity extends Activity { 

    private DrawerLayout mDrawerLayout; 
    private ActionBarDrawerToggle mDrawerToggle; 

    private LinearLayout mDrawerLinear; 
    private GridView mDrawerGrid; 

    // nav drawer title 
    private CharSequence mDrawerTitle; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_menu); 

     mDrawerTitle = getTitle(); 

     mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
     mDrawerLinear=(LinearLayout)findViewById(R.id.drawer_linearlayout); 
     mDrawerGrid = (GridView) findViewById(R.id.drawer_grid); 

     ActionBar actionBar = getActionBar(); 
     actionBar.setIcon(null); 
     actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_TITLE); 

     mDrawerGrid.setAdapter(new DrawerAdapter(this, getDrawerItems())); 
     mDrawerGrid.setOnItemClickListener(new SlideMenuClickListener()); 


     // enabling action bar app icon and behaving it as toggle button 
     getActionBar().setDisplayHomeAsUpEnabled(true); 
     getActionBar().setHomeButtonEnabled(true); 

     mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, 
       R.drawable.action_bar_menu_icon, //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(mDrawerTitle); 
       invalidateOptionsMenu(); 
      } 

      public void onDrawerOpened(View drawerView) { 
       getActionBar().setTitle(mDrawerTitle); 
       invalidateOptionsMenu(); 
      } 
     }; 
     mDrawerLayout.setDrawerListener(mDrawerToggle); 

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

    } 

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

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.menu, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // toggle nav drawer on selecting action bar app icon/title 
     if (mDrawerToggle.onOptionsItemSelected(item)) { 
      return true; 
     } 
     // Handle action bar actions click 
     return super.onOptionsItemSelected(item); 
    } 

    @Override 
    public boolean onPrepareOptionsMenu(Menu menu) { 
     return super.onPrepareOptionsMenu(menu); 
    } 

    private void displayView(int position) { 
     // update the main content by replacing fragments 
     Fragment fragment = null; 
     switch (position) { 
     case 0: 
      fragment = new ProgramFragment(this); 
      break; 
     case 1: 
      fragment = new ListArtistFragment(this); 
      break; 
     case 2: 
      fragment = new GalleryFragment(); 
      break; 
     case 3: 
      fragment = new AboutFragment(); 
      break; 
     case 4: 
      fragment = new ContactFragment(); 
      break; 
     default: 
      break; 
     } 

     if (fragment != null) { 
      FragmentManager fragmentManager = getFragmentManager(); 
      fragmentManager.beginTransaction() 
        .replace(R.id.frame_container, fragment).commit(); 

      // update selected item and title, then close the drawer 
      mDrawerGrid.setItemChecked(position, true); 
      mDrawerGrid.setSelection(position); 
      setTitle("lala"); 
      mDrawerLayout.closeDrawer(mDrawerLinear); 
     } else { 
      // error in creating fragment 
      Log.e("MainActivity", "Error in creating fragment"); 
     } 
    } 

    @Override 
    public void setTitle(CharSequence title) { 
     mDrawerTitle = title; 
     getActionBar().setTitle(mDrawerTitle); 
    } 

    @Override 
    protected void onPostCreate(Bundle savedInstanceState) { 
     super.onPostCreate(savedInstanceState); 
     mDrawerToggle.syncState(); 
    } 

    @Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 
     mDrawerToggle.onConfigurationChanged(newConfig); 
    } 

    private List<DrawerItem> getDrawerItems() { 
     List<DrawerItem> items = new ArrayList<DrawerItem>(); 
     DrawerItem item = new DrawerItem(R.drawable.nav_drawer_programa_icon, 
       R.string.drawer_program); 
     items.add(item); 
     item = new DrawerItem(R.drawable.nav_drawer_artisti_icon, 
       R.string.drawer_artists); 
     items.add(item); 
     item = new DrawerItem(R.drawable.nav_drawer_galerija_icon, 
       R.string.drawer_gallery); 
     items.add(item); 
     item = new DrawerItem(R.drawable.nav_drawer_istorijat_icon, 
       R.string.drawer_about); 
     items.add(item); 
     item = new DrawerItem(R.drawable.nav_drawer_kontakt_icon, 
       R.string.drawer_contact); 
     items.add(item); 
     return items; 
    } 
} 

这是XML。 activity_menu.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 to display Fragments --> 

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

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

    <LinearLayout 
     android:id="@+id/drawer_linearlayout" 
     android:layout_width="290dp" 
     android:layout_height="match_parent" 
     android:background="@color/dark_grey" 
     android:orientation="vertical" > 

     <GridView 
      android:id="@+id/drawer_grid" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:numColumns="2" 
      android:padding="@dimen/padding_scroll" > 
     </GridView> 
    </LinearLayout> 

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

登录:

10-08 10:56:39.358: E/AndroidRuntime(17875): FATAL EXCEPTION: main 
10-08 10:56:39.358: E/AndroidRuntime(17875): Process: com.codewell.unltd.mk.dramskiteatarskopje, PID: 17875 
10-08 10:56:39.358: E/AndroidRuntime(17875): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.codewell.unltd.mk.dramskiteatarskopje/com.codewell.unltd.mk.dramskiteater.MenuActivity}: java.lang.IllegalArgumentException: View android.widget.LinearLayout{42059670 V.E..... ......ID 0,0-0,0 #7f050044 app:id/drawer_linearlayout} is not a sliding drawer 
10-08 10:56:39.358: E/AndroidRuntime(17875): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184) 
10-08 10:56:39.358: E/AndroidRuntime(17875): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233) 
10-08 10:56:39.358: E/AndroidRuntime(17875): at android.app.ActivityThread.access$800(ActivityThread.java:135) 
10-08 10:56:39.358: E/AndroidRuntime(17875): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
10-08 10:56:39.358: E/AndroidRuntime(17875): at android.os.Handler.dispatchMessage(Handler.java:102) 
10-08 10:56:39.358: E/AndroidRuntime(17875): at android.os.Looper.loop(Looper.java:136) 
10-08 10:56:39.358: E/AndroidRuntime(17875): at android.app.ActivityThread.main(ActivityThread.java:5001) 
10-08 10:56:39.358: E/AndroidRuntime(17875): at java.lang.reflect.Method.invokeNative(Native Method) 
10-08 10:56:39.358: E/AndroidRuntime(17875): at java.lang.reflect.Method.invoke(Method.java:515) 
10-08 10:56:39.358: E/AndroidRuntime(17875): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
10-08 10:56:39.358: E/AndroidRuntime(17875): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
10-08 10:56:39.358: E/AndroidRuntime(17875): at dalvik.system.NativeStart.main(Native Method) 
10-08 10:56:39.358: E/AndroidRuntime(17875): Caused by: java.lang.IllegalArgumentException: View android.widget.LinearLayout{42059670 V.E..... ......ID 0,0-0,0 #7f050044 app:id/drawer_linearlayout} is not a sliding drawer 
10-08 10:56:39.358: E/AndroidRuntime(17875): at android.support.v4.widget.DrawerLayout.closeDrawer(DrawerLayout.java:1170) 
10-08 10:56:39.358: E/AndroidRuntime(17875): at com.codewell.unltd.mk.dramskiteater.MenuActivity.displayView(MenuActivity.java:149) 
10-08 10:56:39.358: E/AndroidRuntime(17875): at com.codewell.unltd.mk.dramskiteater.MenuActivity.onCreate(MenuActivity.java:83) 
10-08 10:56:39.358: E/AndroidRuntime(17875): at android.app.Activity.performCreate(Activity.java:5231) 
10-08 10:56:39.358: E/AndroidRuntime(17875): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
10-08 10:56:39.358: E/AndroidRuntime(17875): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148) 
10-08 10:56:39.358: E/AndroidRuntime(17875): ... 11 more 
+1

将适当的'layout_gravity'属性添加到您的LinearLayout中。 – 2014-10-08 09:12:27

+1

查看[这里](http://stackoverflow.com/questions/20235988/linearlayout422725b0-is-not-a-sliding-drawer)更多关于迈克的回答信息 – 2014-10-08 09:16:16

+0

@MikeM。我将此添加到线性布局android:layout_gravity =“start”。仍然崩溃 – Oya 2014-10-08 09:16:33

回答

1

好THX迈克M.卡通伯格斯我固定的错误。在xml中,我必须在layout中放置layout_gravity =“left”属性