ClassCastException android.widget.FrameLayout $ LayoutParams zu android.support.v4.widget.DrawerLayout $ LayoutParams

Ich arbeite an der Navigationsschublade für Android. Wie ich meine Anforderung habe, sollte ich in der Navigationsschublade Rasteransicht und Listenansicht anzeigen. Ich habe eine lineareLayout in der Layout-XML-Datei erstellt und die beiden Widgets (Rasteransicht und Listview) in der LinearLayout platziert.

Wenn ich die Datei ausführe, bekomme ich folgende Fehlermeldung:

Java.lang.RuntimeException: Kann die Aktivität nicht starten ComponentInfo {com.example.navigationdrawer3 / com.example.navigationdrawer3.MainActivity}: java.lang.ClassCastException: android.widget.FrameLayout $ LayoutParams können nicht in android.support.v4 geworfen werden. Widget.DrawerLayout $ LayoutParams

Unten sind meine Java-, Logcat- und NavigationsDrawer-Layoutdateien:

MainActivity.java

public class MainActivity extends Activity { private DrawerLayout mDrawerLayout; private ListView mDrawerList; private ActionBarDrawerToggle mDrawerToggle; private CharSequence mDrawerTitle; //@SuppressWarnings("unused") private CharSequence mTitle; private String[] mGalaxyTitles; private GridView mDrawerGrid; private LinearLayout mDrawerLinear; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTitle = mDrawerTitle = getTitle(); mGalaxyTitles = getResources().getStringArray(R.array.items_array); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); mDrawerList = (ListView) findViewById(R.id.left_drawer); mDrawerGrid = (GridView)findViewById(R.id.gridview); mDrawerLinear =(LinearLayout)findViewById(R.id.linearLayout); mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); mDrawerGrid.setAdapter(new ImageAdapter(MainActivity.this)); mDrawerList.setAdapter(new ArrayAdapter<String>(this, R.layout.drawer_list_item, mGalaxyTitles)); mDrawerList.setOnItemClickListener(new DrawerItemClickListener()); getActionBar().setDisplayHomeAsUpEnabled(true); getActionBar().setHomeButtonEnabled(true); mDrawerToggle = new ActionBarDrawerToggle( this, mDrawerLayout, R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close ) { public void onDrawerClosed(View view) { getActionBar().setTitle(mDrawerTitle); invalidateOptionsMenu(); } public void onDrawerOpened(View drawerView) { getActionBar().setTitle(mDrawerTitle); invalidateOptionsMenu(); } }; mDrawerLayout.setDrawerListener(mDrawerToggle); if (savedInstanceState == null) { selectItem(0); } } class DrawerItemClickListener implements ListView.OnItemClickListener { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // TODO Auto-generated method stub switch(position){ case 0: menu0(); return; case 1: menu1(); return; case 2: menu2(); return; case 3: menu3(); return; case 4: menu4(); return; case 5: menu5(); return; case 6: menu6(); return; case 7: menu7(); return; case 8: menu8(); return; } } protected void menu0() { Intent Main0 = new Intent(MainActivity.this, Page0.class); startActivity(Main0); return; } protected void menu1() { Intent Main1 = new Intent(MainActivity.this, Page1.class); startActivity(Main1); return; } protected void menu2() { Intent Main2 = new Intent(MainActivity.this, Page2.class); startActivity(Main2); return; } protected void menu3() { Intent Main3 = new Intent(MainActivity.this, Page3.class); startActivity(Main3); return; } protected void menu4() { Intent Main4 = new Intent(MainActivity.this, Page4.class); startActivity(Main4); return; } protected void menu5() { Intent Main5 = new Intent(MainActivity.this, Page5.class); startActivity(Main5); return; } protected void menu6() { Intent Main6 = new Intent(MainActivity.this, Page6.class); startActivity(Main6); return; } protected void menu7() { Intent Main7 = new Intent(MainActivity.this, Page7.class); startActivity(Main7); return; } protected void menu8() { Intent Main8 = new Intent(MainActivity.this, Page8.class); startActivity(Main8); return; } } @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 void setTitle(CharSequence title) { mTitle = title; getActionBar().setTitle(mDrawerTitle); } @Override public boolean onPrepareOptionsMenu(Menu menu) { //boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList); //boolean drawerOpen2 = mDrawerLayout.isDrawerOpen(mDrawerGrid); boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerLayout); menu.findItem(R.id.action_settings).setVisible(!drawerOpen); //menu.findItem(R.id.action_settings).setVisible(!drawerOpen2); return super.onPrepareOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (mDrawerToggle.onOptionsItemSelected(item)) { return true; } switch(item.getItemId()) { case R.id.action_settings: setting(); return true; case R.id.about: about(); return true; default: return super.onOptionsItemSelected(item); } } private void about() { // TODO Auto-generated method stub Intent Main1 = new Intent(MainActivity.this, About.class); startActivity(Main1); return; } private void setting() { // TODO Auto-generated method stub Intent Main1 = new Intent(MainActivity.this, Setting.class); startActivity(Main1); return; } private void selectItem(int position) { Fragment fragment = new GalaxyFragment(); Bundle args = new Bundle(); args.putInt(GalaxyFragment.ARG_GALAXY_NUMBER, position); fragment.setArguments(args); FragmentManager fragmentManager = getFragmentManager(); fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit(); mDrawerList.setItemChecked(position, true); setTitle(mGalaxyTitles[position]); mDrawerLayout.closeDrawer(mDrawerLayout); //mDrawerLayout.closeDrawer(mDrawerGrid); } class GalaxyFragment extends Fragment{ public static final String ARG_GALAXY_NUMBER = "galaxy_number"; public GalaxyFragment() { } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.about, container, false); return rootView; } } //Gridview BaseAdapter class class ImageAdapter extends BaseAdapter{ Context context; ImageAdapter(Context context){ this.context = context; } @Override public int getCount() { // TODO Auto-generated method stub return mThumbIds.length; } @Override public Object getItem(int arg0) { // TODO Auto-generated method stub return null; } @Override public long getItemId(int arg0) { // TODO Auto-generated method stub return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub ImageView imageView; if(convertView == null){ imageView = new ImageView(context); imageView.setLayoutParams(new GridView.LayoutParams(25, 25)); imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); imageView.setPadding(8, 8, 8, 8); }else { imageView = (ImageView) convertView; } imageView.setImageResource(mThumbIds[position]); return imageView; } // references to our images private Integer[] mThumbIds = { R.drawable.sample_2, R.drawable.sample_3, R.drawable.sample_4, R.drawable.sample_5, }; } } 

Activity_main.xml

 <android.support.v4.widget.DrawerLayout 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" tools:context=".MainActivity" android:id="@+id/drawer_layout"> <FrameLayout android:id="@+id/content_frame" android:layout_width="match_parent" android:layout_height="match_parent" > </FrameLayout> <LinearLayout android:id="@+id/linearLayout" android:layout_width="320dp" android:layout_height="match_parent" android:orientation="vertical" android:layout_gravity="left" android:choiceMode="singleChoice" android:divider="@android:color/transparent" android:dividerHeight="0dp" android:background="#111"> <GridView android:id="@+id/gridview" android:layout_width="280dp" android:layout_height="match_parent" android:stretchMode="columnWidth" android:numColumns="auto_fit"/> <!-- android:gravity="center" --> <ListView android:id="@+id/left_drawer" android:layout_width="240dp" android:layout_height="match_parent" /> </LinearLayout> </android.support.v4.widget.DrawerLayout> 

Logcat

 07-30 06:15:57.203: W/dalvikvm(853): threadid=1: thread exiting with uncaught exception (group=0x40a71930) 07-30 06:15:57.213: E/AndroidRuntime(853): FATAL EXCEPTION: main 07-30 06:15:57.213: E/AndroidRuntime(853): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.navigationdrawer3/com.example.navigationdrawer3.MainActivity}: java.lang.ClassCastException: android.widget.FrameLayout$LayoutParams cannot be cast to android.support.v4.widget.DrawerLayout$LayoutParams 07-30 06:15:57.213: E/AndroidRuntime(853): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 07-30 06:15:57.213: E/AndroidRuntime(853): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 07-30 06:15:57.213: E/AndroidRuntime(853): at android.app.ActivityThread.access$600(ActivityThread.java:141) 07-30 06:15:57.213: E/AndroidRuntime(853): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 07-30 06:15:57.213: E/AndroidRuntime(853): at android.os.Handler.dispatchMessage(Handler.java:99) 07-30 06:15:57.213: E/AndroidRuntime(853): at android.os.Looper.loop(Looper.java:137) 07-30 06:15:57.213: E/AndroidRuntime(853): at android.app.ActivityThread.main(ActivityThread.java:5041) 07-30 06:15:57.213: E/AndroidRuntime(853): at java.lang.reflect.Method.invokeNative(Native Method) 07-30 06:15:57.213: E/AndroidRuntime(853): at java.lang.reflect.Method.invoke(Method.java:511) 07-30 06:15:57.213: E/AndroidRuntime(853): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 07-30 06:15:57.213: E/AndroidRuntime(853): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 07-30 06:15:57.213: E/AndroidRuntime(853): at dalvik.system.NativeStart.main(Native Method) 07-30 06:15:57.213: E/AndroidRuntime(853): Caused by: java.lang.ClassCastException: android.widget.FrameLayout$LayoutParams cannot be cast to android.support.v4.widget.DrawerLayout$LayoutParams 07-30 06:15:57.213: E/AndroidRuntime(853): at android.support.v4.widget.DrawerLayout.isDrawerView(DrawerLayout.java:809) 07-30 06:15:57.213: E/AndroidRuntime(853): at android.support.v4.widget.DrawerLayout.closeDrawer(DrawerLayout.java:1012) 07-30 06:15:57.213: E/AndroidRuntime(853): at com.example.navigationdrawer3.MainActivity.selectItem(MainActivity.java:265) 07-30 06:15:57.213: E/AndroidRuntime(853): at com.example.navigationdrawer3.MainActivity.onCreate(MainActivity.java:86) 07-30 06:15:57.213: E/AndroidRuntime(853): at android.app.Activity.performCreate(Activity.java:5104) 07-30 06:15:57.213: E/AndroidRuntime(853): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 07-30 06:15:57.213: E/AndroidRuntime(853): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 07-30 06:15:57.213: E/AndroidRuntime(853): ... 11 more 

Die Codezeile in Zeile 86:

 selectItem(0); 

Die Codezeile in Zeile 265:

 mDrawerLayout.closeDrawer(mDrawerLayout); 

Ich habe versucht, diese Laufzeit erroe in vielerlei Hinsicht zu korrigieren, aber nicht zu korrigieren. Kann jemand eine Antwort für mein Problem vorschlagen.

  • Wie man die Farbe des Hamburger-Symbols in der Material-Design-Navigationsschublade ändert
  • So erstellen Sie einen einfachen Teiler in der neuen NavigationView?
  • So öffnen Sie die Navigationsschublade ohne Aktionsleiste, öffnen Sie mit einem Knopf
  • Ändern Sie die Farbe des Navigations-Schubladen-Symbols
  • Ich möchte Slide-Menü mit 3D-Effekt wie die unten Bild machen
  • Floating Action Button erscheint über Navigation Schublade
  • NavigationView Menüpunkte mit Zähler auf der rechten Seite
  • Wie man ein DrawerLayout mit einem sichtbaren Griff umsetzt
  • 7 Solutions collect form web for “ClassCastException android.widget.FrameLayout $ LayoutParams zu android.support.v4.widget.DrawerLayout $ LayoutParams”

    Antworten:

     mDrawerLayout.closeDrawer(mDrawerLayout); 

    Hatte falsches Layout. So ändern Sie es mit drawerlayout wird es ausarbeiten.

    Was hat mir dieses Problem gelöst:

    In MainActivity fügen Sie ein neues Feld für die LinearLayout und weisen Sie ihm einen Wert in onCreate() (dieser Teil genauso wie emaleavil vorgeschlagen ):

     private LinearLayout linearLayout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // ... linearLayout = (LinearLayout) findViewById(R.id.linearLayout); } 

    Dann bei selectItem() , beim Aufruf von closeDrawer() , linearLayout einfach linearLayout als Argument:

     drawerLayout.closeDrawer(linearLayout); 

    Ich hatte das gleiche Problem. Ich habe gerade loszuwerden,

     mDrawerLayout.closeDrawer(Gravity.LEFT); 

    Ich hatte das gleiche Problem … Lösung in meinem Fall war:

    In deiner MainActivity addiere ich:

     private LinearLayout linearLayout; public void onCreate(Bundle savedInstanceState){ ... linearLayout = (LinearLayout)findViewById(R.id.linearLayout); ... } 

    OnPrepareOptionsMenu:

     @Override public boolean onPrepareOptionsMenu(Menu menu) { boolean drawerOpen = mDrawerLayout.isDrawerOpen(this.linearLayout); menu.findItem(R.id.action_settings).setVisible(!drawerOpen); return super.onPrepareOptionsMenu(menu); } 

    Es tut mir leid für mein schlechtes Englisch.

    Ich denke, du solltest deine Inhalte und Schublade genau so platzieren, wie es im Handbuch siad ist. Jetzt stimmt die XML-Struktur nicht überein. Beachten Sie, dass nur das Feld "id" übereinstimmen sollte, können die Ansichtstypen und Parameter unterschiedlich sein.

    Endlich fand ich den Weg, um eine benutzerdefinierte listView in der Schublade Layout zu implementieren. Dies ist die Post, die mir helfen, es zu tun … http://www.michenux.net/android-navigation-drawer-748.html

     mDrawerLayout.closeDrawer(mDrawerLayout); 

    oder

     mDrawerLayout.closeDrawer(Gravity.LEFT); 

    Beide sind ok.HINWEIS: Sie müssen wissen, was ist Parameter.

    Einen schönen Tag noch !

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.