2016-04-05 6 views
-1

Ich versuche ein benutzerdefiniertes DrawerLayout zu erstellen, das eine ListView enthält, aber ich kann nicht funktionieren. Ich konnte es zum Laufen bringen, bevor ich den Inhalt eines LinearLayout verpacke, um es mehr Gewohnheit zu machen und ein Bild über dem ListView hinzuzufügen.Das Schließen von DrawerLayout verursacht eine Ausnahme: LinearLayout kann nicht in DrawerLayout umgewandelt werden.

Ich habe diese Ausnahme, wenn ich versuche, zu schließenDrawer() beim Übergeben der linearenLayout, habe ich mehrere Post über diese Art von Problem zu sehen, aber die Lösung für die meisten von ihnen ist die LinearLayout an die closeDrawer() -Funktion zu übergeben , die ich schon tat:

04-05 12:17:10.100 18879-18879/com.plante.android.cobalt E/AndroidRuntime: FATAL EXCEPTION: main 
Process: com.plante.android.cobalt, PID: 18879 
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.plante.android.cobalt/com.plante.android.cobalt.activityv2.ActivityHome}: java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams cannot be cast to android.support.v4.widget.DrawerLayout$LayoutParams 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
    at android.app.ActivityThread.-wrap11(ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5417) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
    Caused by: 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:1415) 
    at android.support.v4.widget.DrawerLayout.closeDrawer(DrawerLayout.java:1630) 
    at com.plante.android.cobalt.activityv2.ActivityHome.selectItem(ActivityHome.java:190) 
    at com.plante.android.cobalt.activityv2.ActivityHome.onCreate(ActivityHome.java:155) 
    at android.app.Activity.performCreate(Activity.java:6251) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
    at android.app.ActivityThread.-wrap11(ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5417) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

Hier ist meine Aktivität:

@Bind(R.id.drawer_layout) 
DrawerLayout mDrawerLayout; 
@Bind(R.id.actionToolbar) 
Toolbar toolbar; 
@Bind(R.id.left_drawer_item) 
LinearLayout mDrawerLinear; 
@Bind(R.id.left_drawer_child) 
ListView mDrawerListChild; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_v2_home); 
    ButterKnife.bind(this); 

    setSupportActionBar(toolbar); 
    getSupportActionBar().setTitle(getResources().getString(R.string.app_name)); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    getSupportActionBar().setHomeButtonEnabled(true); 

    mPlanTitles = getResources().getStringArray(R.array.plan_list); 

    mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); 
    // set up the drawer's list view with items and click listener 
    ArrayList<String> myList = new ArrayList<>(); 
    myList.add("First Item"); 
    myList.add("Second Item"); 
    mDrawerListChild.setAdapter(new DrawerListAdapter(this, R.layout.drawer_layout_item, myList)); 
    mDrawerListChild.setOnItemClickListener(new DrawerItemClickListener()); 

    // enable ActionBar app icon to behave as action to toggle nav drawer 

    mDrawerToggle = new ActionBarDrawerToggle(
      this,     /* host Activity */ 
      mDrawerLayout,   /* DrawerLayout object */ 
      toolbar, /* nav drawer image to replace 'Up' caret */ 
      R.string.drawer_open, /* "open drawer" description for accessibility */ 
      R.string.drawer_close /* "close drawer" description for accessibility */ 
    ) { 
     public void onDrawerClosed(View view) { 
      //syncActionBarArrowState(); 
     } 

     public void onDrawerOpened(View drawerView) { 
      //mDrawerToggle.setDrawerIndicatorEnabled(true); 
     } 
    }; 
    getSupportFragmentManager().addOnBackStackChangedListener(mOnBackStackChangedListener); 
    mDrawerLayout.setDrawerListener(mDrawerToggle); 
    setSupportActionBar(toolbar); 
    user = getUser(); 

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

} 


private void selectItem(int position) { 
    BackHandledFragment fragment = new FragmentMobilePlan(); 
    setSelectedFragment(fragment); 

    FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
    ft.setCustomAnimations(R.anim.pull_in_right, R.anim.push_out_left, R.anim.pull_in_left, R.anim.push_out_right); 
    ft.replace(R.id.content_frame, fragment) 
      .commit(); 

    // update selected item and title, then close the drawer 
    mDrawerListChild.setItemChecked(position, true); 
    setTitle(mPlanTitles[position]); 
    mDrawerLayout.closeDrawer(mDrawerLinear); 
} 

Hier ist mein Layout:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MainActivity"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:gravity="center" 
     android:orientation="vertical"> 

     <include layout="@layout/action_bar" /> 

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

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

      <ImageView 
       android:id="@+id/profilIcon" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:src="@drawable/ic_people1blue2x" /> 

      <ListView 
       android:id="@+id/left_drawer_child" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:choiceMode="singleChoice" 
       android:divider="@android:color/transparent" 
       android:dividerHeight="0dp" 
       android:background="#111" /> 

     </LinearLayout> 

    </LinearLayout> 

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

Mögliches Duplikat von [ClassCastException android.widget.FrameLayout $ LayoutParams zu android.support.v4.widget.DrawerLayout $ LayoutParams] (http://stackoverflow.com/questions/17939798/classcastexception-android-widget-frachelayoutlayoutparams-to -android-support-v4) –

+0

Wo ist dein Drawerlayout xml? –

+0

@ Ben-J Ich habe es hinzugefügt, es nicht wegen des Platzes in der Post angezeigt – Jaythaking

Antwort

0

Für diejenigen, die gegen das gleiche Problem stolpern, hatte ich diese Ausnahme, weil das LinearLayout, das ich an das DrawerLayout für closeDrawer() übergeben hat, nicht das zweite Kind von DrawerLayout in meinem XML war. Es musste direkt im DrawerLayout liegen.