2015-05-13 3 views
0

Ave,Cast исключение с андроида ящиками

я учусь Android выдвижных ящиков: «http://www.androidhive.info/2013/11/android-sliding-menu-using-navigation-drawer/» и я столкнулся странные проблемы. При запуске приложения он бросает:

05-13 12:50:08.325 2030-2030/? E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: com.lanceit.haito.lanceit, PID: 2030 
    java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams cannot be cast to android.support.v4.widget.DrawerLayout$LayoutParams 
      at android.support.v4.widget.DrawerLayout.isDrawerView(DrawerLayout.java:1100) 
      at android.support.v4.widget.DrawerLayout.isDrawerOpen(DrawerLayout.java:1350) 
      at com.lanceit.haito.lanceit.activities.HubActivity.onPrepareOptionsMenu(HubActivity.java:183) 
      at android.app.Activity.onPreparePanel(Activity.java:2838) 
      at android.support.v4.app.FragmentActivity.onPrepareOptionsPanel(FragmentActivity.java:469) 
      at android.support.v7.app.ActionBarActivity.superOnPrepareOptionsPanel(ActionBarActivity.java:284) 
      at android.support.v7.app.ActionBarActivityDelegate.onPrepareOptionsPanel(ActionBarActivityDelegate.java:204) 
      at android.support.v7.app.ActionBarActivity.onPrepareOptionsPanel(ActionBarActivity.java:256) 
      at android.support.v4.app.FragmentActivity.onPreparePanel(FragmentActivity.java:458) 
      at android.support.v7.app.ActionBarActivity.superOnPreparePanel(ActionBarActivity.java:280) 
      at android.support.v7.app.ActionBarActivityDelegate$1.onPreparePanel(ActionBarActivityDelegate.java:84) 
      at android.support.v7.app.ActionBarActivityDelegateBase.preparePanel(ActionBarActivityDelegateBase.java:1006) 
      at android.support.v7.app.ActionBarActivityDelegateBase.doInvalidatePanelMenu(ActionBarActivityDelegateBase.java:1182) 
      at android.support.v7.app.ActionBarActivityDelegateBase.access$100(ActionBarActivityDelegateBase.java:79) 
      at android.support.v7.app.ActionBarActivityDelegateBase$1.run(ActionBarActivityDelegateBase.java:118) 
      at android.os.Handler.handleCallback(Handler.java:739) 
      at android.os.Handler.dispatchMessage(Handler.java:95) 
      at android.os.Looper.loop(Looper.java:135) 
      at android.app.ActivityThread.main(ActivityThread.java:5221) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:372) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 

Actuall метания часть:

@Override 
    public boolean onPrepareOptionsMenu(Menu menu) { 
     // if nav drawer is opened, hide the action items 
     thrown -->boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList); 
     menu.findItem(R.id.action_settings).setVisible(!drawerOpen); 
     return super.onPrepareOptionsMenu(menu); 
    } 

Код:

import android.content.Context; 
import android.content.res.Configuration; 
import android.content.res.TypedArray; 
import android.location.LocationManager; 
import android.net.Uri; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.view.PagerTitleStrip; 
import android.support.v4.view.ViewPager; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v4.app.ActionBarDrawerToggle; 
import android.support.v7.app.ActionBarActivity; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.ListView; 

import com.android.volley.RequestQueue; 
import com.android.volley.toolbox.Volley; 
import com.lanceit.haito.lanceit.R; 
import com.lanceit.haito.lanceit.model.User; 
import com.lanceit.haito.lanceit.utils.GeoLocationManager; 
import com.lanceit.haito.lanceit.view.PageTransformer; 
import com.lanceit.haito.lanceit.view.drawer.adapter.DrawerListAdapter; 
import com.lanceit.haito.lanceit.view.drawer.model.DrawerItem; 
import com.lanceit.haito.lanceit.view.hubFragments.AddFragment; 
import com.lanceit.haito.lanceit.view.hubFragments.LanceListFragment; 
import com.lanceit.haito.lanceit.view.hubFragments.ListAllFragment; 
public class HubActivity extends ActionBarActivity implements AddFragment.OnFragmentInteractionListener, ListAllFragment.OnFragmentInteractionListener { 

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

    // nav drawer title 
    private CharSequence mDrawerTitle; 

    // used to store app title 
    private CharSequence mTitle; 


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

     mTitle = mDrawerTitle = getTitle(); 

     // load slide menu items 
     String[] navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items); 

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

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

     ArrayList<DrawerItem> navDrawerItems = new ArrayList<DrawerItem>(); 

     // adding nav drawer items to array 
     // Home 
     navDrawerItems.add(new DrawerItem(navMenuTitles[0], navMenuIcons.getResourceId(0, -1))); 
     // Find People 
     navDrawerItems.add(new DrawerItem(navMenuTitles[1], navMenuIcons.getResourceId(1, -1))); 
     // Photos 
     navDrawerItems.add(new DrawerItem(navMenuTitles[2], navMenuIcons.getResourceId(2, -1))); 
     // Communities, Will add a counter here 
     navDrawerItems.add(new DrawerItem(navMenuTitles[3], navMenuIcons.getResourceId(3, -1), true, "22")); 
     // Pages 
     navDrawerItems.add(new DrawerItem(navMenuTitles[4], navMenuIcons.getResourceId(4, -1))); 
     // What's hot, We will add a counter here 
     navDrawerItems.add(new DrawerItem(navMenuTitles[5], navMenuIcons.getResourceId(5, -1), true, "50+")); 


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

     // setting the nav drawer list adapter 
     DrawerListAdapter adapter = new DrawerListAdapter(getApplicationContext(), navDrawerItems); 
     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 
       invalidateOptionsMenu(); 
      } 

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

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.edit, 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 
     switch (item.getItemId()) { 
      case R.id.action_settings: 
       return true; 
      default: 
       return super.onOptionsItemSelected(item); 
     } 
    } 

    /** 
    * Called when invalidateOptionsMenu() is triggered 
    */ 
    @Override 
    public boolean onPrepareOptionsMenu(Menu menu) { 
     // if nav drawer is opened, hide the action items 
     boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList); 
     menu.findItem(R.id.action_settings).setVisible(!drawerOpen); 
     return super.onPrepareOptionsMenu(menu); 
    } 

    @Override 
    public void setTitle(CharSequence title) { 
     mTitle = title; 
     getSupportActionBar().setTitle(mTitle); 
    } 

    /** 
    * 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); 
    } 


} 

и связанные с 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.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:id="@+id/pager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@drawable/bg1" 
     tools:context="com.lanceit.haito.lanceit.activities.HubActivity"> 

     <android.support.v4.view.PagerTitleStrip 
      android:id="@+id/pager_strip" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:background="@color/primary_material_dark" 
      android:paddingBottom="10dp" 
      android:paddingTop="10dp" /> 
    </android.support.v4.view.ViewPager> 

    <!-- The navigation drawer --> 
    <RelativeLayout 
     android:layout_width="280dp" 
     android:layout_height="match_parent" 
     android:id="@+id/drawerPane" 
     android:layout_gravity="start"> 

     <!-- Profile Box --> 

     <RelativeLayout 
      android:id="@+id/profileBox" 
      android:layout_width="match_parent" 
      android:layout_height="100dp" 
      android:background="@color/material_blue_grey_800" 
      android:padding="8dp" > 

      <ImageView 
       android:id="@+id/avatar" 
       android:layout_width="50dp" 
       android:layout_height="50dp" 
       android:src="@drawable/ic_launcher" 
       android:layout_marginTop="15dp" /> 

      <LinearLayout 
       android:layout_width="wrap_content" 
       android:layout_height="42dp" 
       android:layout_centerVertical="true" 
       android:layout_marginLeft="15dp" 
       android:layout_toRightOf="@+id/avatar" 
       android:orientation="vertical" > 

       <TextView 
        android:id="@+id/userName" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="Rishabh" 
        android:textColor="#fff" 
        android:textSize="16sp" 
        android:textStyle="bold" /> 

       <TextView 
        android:id="@+id/desc" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_gravity="bottom" 
        android:layout_marginTop="4dp" 
        android:text="View Profile" 
        android:textColor="#fff" 
        android:textSize="12sp" /> 
      </LinearLayout> 
     </RelativeLayout> 

     <!-- List of Actions (pages) --> 
     <ListView 
      android:id="@+id/list_slidermenu" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:background="@android:color/holo_red_light" 
      android:choiceMode="singleChoice" 
      android:divider="@android:color/black" 
      android:dividerHeight="5dp"/> 

    </RelativeLayout> 

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

Debugger

+0

не могли бы вы написать, что является линией (HubActivity.java:183). Из ошибки я понимаю, что тип вашего layoutParams ошибочен, но я не могу найти их в коде –

+0

@GabriellaAngelova Я обновил сообщение и отметил проблематичную часть. Он находится в onPrepareOptionsMenu thrown -> boolean drawerOpen = mDrawerLayout.isDrawerOpen (mDrawerList); – Haito

+0

@anil Я не импортирую ничего из этого материала:> – Haito

ответ

0

Я думаю, что ваш mDrawerList должен быть непосредственно в DrawerLayout, и именно поэтому он говорит вам, что параметры макета не могут быть отлиты. Ваш 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.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:id="@+id/pager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@drawable/bg1" 
     tools:context="com.lanceit.haito.lanceit.activities.HubActivity"> 

    <android.support.v4.view.PagerTitleStrip 
     android:id="@+id/pager_strip" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="@color/primary_material_dark" 
     android:paddingBottom="10dp" 
     android:paddingTop="10dp" /> 
    </android.support.v4.view.ViewPager> 
    <CheckedTextView 
     android:id="@+id/home_drawer_cv_banks" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" 
     android:background="@android:color/holo_red_light" 
     android:focusable="true" 
     android:text="Some Dummy Text" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:textColor="#FFF" /> 
    <ListView 
     android:id="@+id/list_slidermenu" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:background="@android:color/holo_red_light" 
     android:choiceMode="singleChoice" 
     android:divider="@android:color/black" 
     android:dividerHeight="5dp" > 
    </ListView> 

Взгляните еще раз на примере вы дали http://www.androidhive.info/2013/11/android-sliding-menu-using-navigation-drawer/

P.S. Другой способ, не изменяя ваш xml, - передать метод isDrawerOpen LinearLayout, в котором находится ListView, но который находится непосредственно в вашем DrawerLayout, так что это тот, который имеет RelativeLayout в нем. См. Этот вопрос What do you need to pass to v4.widget.DrawerLayout.isDrawerOpen()/.openDrawer()/.closeDrawer()

+0

Хорошо .. Я использовал его, но я не могу заставить его работать правильно ... Я обновил свой XML. Я пытаюсь сделать что-то вроде этого: http://codetheory.in/wp-content/uploads /2015/02/Screenshot_2015-02-01-19-30-28.png Но часть с «текущим профилем» вообще не отображается. Thx для помощи в этом раздавлении, но вы могли бы помочь мне и с заставить этот ящик работать полностью? – Haito

+0

Что не отображается правильно в части «текущий профиль»? –

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