2014-02-03 2 views
-1

Привет, ребята, я новичок в android, и я нахожусь в фазе обучения. Я последовал за учебником на навигационном ящике от androidhive и сделал этот код обратно совместимым для 2.3.3. , но я получаю ошибку следующим образом:ListVIew не является скользящим выдвижным ящиком

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.assignment.drawersam/com.assignment.drawersam.MainDrawerActivity}: java.lang.IllegalArgumentException: View android.widget.ListView{4170e148 VFED.VC. ......I. 0,0-0,0 #7f05003e app:id/list_slidermenu} is not a sliding drawer 

Я не в состоянии понять, что ошибка и как ее исправить. любая помощь будет оценена.

код в OnCreate():

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

mTitle = mDrawerTitle = getTitle(); 
// load slide menu items 
navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items); 

     // nav drawer icons from resources 
     navMenuIcons = getResources() 
       .obtainTypedArray(R.array.nav_drawer_icons); 

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

     navDrawerItem = new ArrayList<NavDrawerItem>(); 

     // adding nav drawer items to array 
     // Home 
     navDrawerItem.add(new NavDrawerItem(navMenuTitles[0], navMenuIcons.getResourceId(0, -1))); 
     // Find People 
     navDrawerItem.add(new NavDrawerItem(navMenuTitles[1], navMenuIcons.getResourceId(1, -1))); 


     // Recycle the typed array 
     navMenuIcons.recycle(); 

     mDrawerList.setOnItemClickListener(new SlideMenuClickListener()); 

     // setting the nav drawer list adapter 
     adapter = new NavDrawerListAdapter(getApplicationContext(), 
       navDrawerItem); 
     mDrawerList.setAdapter(adapter); 

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

     mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, 
       R.drawable.ic_drawer, //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) { 
       getSupportActionBar().setTitle(mTitle); 
       // calling onPrepareOptionsMenu() to show action bar icons 
       supportInvalidateOptionsMenu(); 
      } 

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

     if (savedInstanceState == null) { 
      // on first time display view for first nav item 
      displayView(0); 
     } 
    } 

код в activity_main_drawer.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".MainDrawerActivity" > 

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

     <ListView 
      android:id="@+id/list_slidermenu" 
      android:layout_width="240dp" 
      android:layout_height="match_parent" 
      android:background="#fff" 
      android:choiceMode="singleChoice" 
      android:divider="#369" 
      android:dividerHeight="1dp" 
      android:gravity="start" 
      android:listSelector="@drawable/list_selector" /> 
    </android.support.v4.widget.DrawerLayout> 

</LinearLayout> 
+0

https://stackoverflow.com/a/46168568/3496570 – Nepster

ответ

4

Как уже упоминалось в documentation, DrawerLayout должен быть вид корень макета.

Удалить LinearLayout и позволить DrawerLayout быть корневым представлением.

0

Я работал над версией, совместимой с более ранними версиями android (уровень Api 7 и выше), вам также нужна библиотека поддержки Android v7, чтобы она работала. Вот полный код: Sliding menu based on androidhive code for api level 7 and above

+1

Эй, я очень оценил ваш ответ. Да, я включил библиотеку поддержки v7. – Nakul

Смежные вопросы