7

Ich habe ein Tutorial über die Implementierung der navigationView aus der Design-Support-Bibliothek verfolgt und ich komme einfach nicht von diesem Fehler weg. Ich habe die anderen Lösungen gelesen, die auf dieser Seite veröffentlicht wurden, aber keine von ihnen hat für mich funktioniert, bitte helfen Sie mir.Fehler beim Aufblasen der Klasse android.support.design.widget.NavigationView

Caused by: android.view.InflateException: Binary XML file line #28: Error inflating class android.support.design.widget.NavigationView 

activity_main.xml

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/drawer" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:fitsSystemWindows="true" 
tools:context=".MainActivity"> 

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

    <include 
     android:id="@+id/tool_bar" 
     layout="@layout/tool_bar" /> 

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

    </FrameLayout> 

</LinearLayout> 

<android.support.design.widget.NavigationView 
    android:id="@+id/navigation_view" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:layout_gravity="start" 
    app:headerLayout="@layout/header" 
    app:menu="@menu/drawer" /> 
</android.support.v4.widget.DrawerLayout> 

MainActiviy.java

import android.support.design.widget.NavigationView; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.ActionBarDrawerToggle; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.support.v7.widget.Toolbar; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Toast; 

public class MainActivity extends AppCompatActivity { 

//Defining Variables 
private Toolbar toolbar; 
private NavigationView navigationView; 
private DrawerLayout drawerLayout; 

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

    // Initializing Toolbar and setting it as the actionbar 
    toolbar = (Toolbar) findViewById(R.id.tool_bar); 
    setSupportActionBar(toolbar); 

    //Initializing NavigationView 
    navigationView = (NavigationView) findViewById(R.id.navigation_view); 

    //Setting Navigation View Item Selected Listener to handle the item click of the navigation menu 
    navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 

     // This method will trigger on item Click of navigation menu 
     @Override 
     public boolean onNavigationItemSelected(MenuItem menuItem) { 

      //Checking if the item is in checked state or not, if not make it in checked state 
      if (menuItem.isChecked()) menuItem.setChecked(false); 
      else menuItem.setChecked(true); 

      //Closing drawer on item click 
      drawerLayout.closeDrawers(); 

      //Check to see which item was being clicked and perform appropriate action 
      switch (menuItem.getItemId()) { 

       //Replacing the main content with ContentFragment Which is our Inbox View; 
       case R.id.inbox: 
        Toast.makeText(getApplicationContext(), "Inbox Selected", Toast.LENGTH_SHORT).show(); 
        ContentFragment fragment = new ContentFragment(); 
        android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
        fragmentTransaction.replace(R.id.frame, fragment); 
        fragmentTransaction.commit(); 
        return true; 

       // For rest of the options we just show a toast on click 
       case R.id.starred: 
        Toast.makeText(getApplicationContext(), "Stared Selected", Toast.LENGTH_SHORT).show(); 
        return true; 
       case R.id.sent_mail: 
        Toast.makeText(getApplicationContext(), "Send Selected", Toast.LENGTH_SHORT).show(); 
        return true; 
       case R.id.drafts: 
        Toast.makeText(getApplicationContext(), "Drafts Selected", Toast.LENGTH_SHORT).show(); 
        return true; 
       case R.id.allmail: 
        Toast.makeText(getApplicationContext(), "All Mail Selected", Toast.LENGTH_SHORT).show(); 
        return true; 
       case R.id.trash: 
        Toast.makeText(getApplicationContext(), "Trash Selected", Toast.LENGTH_SHORT).show(); 
        return true; 
       case R.id.spam: 
        Toast.makeText(getApplicationContext(), "Spam Selected", Toast.LENGTH_SHORT).show(); 
        return true; 
       default: 
        Toast.makeText(getApplicationContext(), "Somethings Wrong", Toast.LENGTH_SHORT).show(); 
        return true; 
      } 
     } 
    }); 

    // Initializing Drawer Layout and ActionBarToggle 
    drawerLayout = (DrawerLayout) findViewById(R.id.drawer); 
    ActionBarDrawerToggle actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.openDrawer, R.string.closeDrawer) { 

     @Override 
     public void onDrawerClosed(View drawerView) { 
      // Code here will be triggered once the drawer closes as we dont want anything to happen so we leave this blank 
      super.onDrawerClosed(drawerView); 
     } 

     @Override 
     public void onDrawerOpened(View drawerView) { 
      // Code here will be triggered once the drawer open as we dont want anything to happen so we leave this blank 
      super.onDrawerOpened(drawerView); 
     } 
    }; 

    //Setting the actionbarToggle to drawer layout 
    drawerLayout.setDrawerListener(actionBarDrawerToggle); 

    //calling sync state is necessay or else your hamburger icon wont show up 
    actionBarDrawerToggle.syncState(); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 
} 

build.gradle

apply plugin: 'com.android.application' 

android { 
compileSdkVersion 23 
buildToolsVersion '23.0.0' 

defaultConfig { 
    applicationId "com.example.mobinamanzai.projectalpha" 
    minSdkVersion 17 
    targetSdkVersion 23 
    versionCode 1 
    versionName "1.0" 
} 
buildTypes { 
    release { 
     minifyEnabled false 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
    } 
    debug { 
     debuggable true 
    } 
} 
} 

dependencies { 
compile fileTree(dir: 'libs', include: ['*.jar']) 

compile 'com.android.support:support-v4:23.0.0' 
compile 'com.android.support:appcompat-v7:23.0.0' 
compile 'com.android.support:design:23.0.0' 
compile 'de.hdodenhof:circleimageview:1.3.0' 
} 

EDIT:

Stack Trace Verursacht durch: android.view.InflateException: Binary XML-Datei Zeile # 28: Fehler aufblasen Klasse android.support.design.widget.NavigationView Verursacht durch: java.lang.reflect.InvocationTargetException Verursacht durch: Android. view.InflateException: Binäre XML-Dateizeile # 2: Fehler beim Aufblasen der Klasse android.widget.RelativeLayout Verursacht von: java.lang.reflect.InvocationTargetException verursacht durch: java.lang.OutOfMemoryError: Zuweisung einer 276203532-Bytezuordnung mit 12108696 ist fehlgeschlagen Bytes und 174MB bis OOM

EDIT 2: Das Problem in der header.xml

+0

können Sie mehr von Ihrem verwandten Stack-Trace hinzufügen –

+0

@Diyoda gerade bearbeitet –

Antwort

6

Es al zu sein scheint l Start von hier,

Caused by: java.lang.OutOfMemoryError: Failed to allocate a 276203532 byte allocation with 12108696 free bytes and 174MB until OOM at dalvik.system.VMRuntime.newNonMovableArray(Native Method) at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:609) at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:444) 

Da ein Bild, das Sie für den Header verwenden oder als Elemente in Ihrem navigationdrawer hat eine höhere Auflösung als die Anwendung zugewiesenen Speicher verarbeiten kann. Reduziere diese Bilder und überprüfe. Das wird das Problem lösen. Wenn Sie unten etwas mehr Stack-Trace hinzufügen, können Sie herausfinden, welches Element genau dieses Problem verursacht.

+1

Kein Problem. Ich bin froh, dass ich dir helfen kann. –

6

Ich habe den Inflater-Fehler für die Navigationsansicht beim Wechsel auf Android Support-Bibliothek Version 23.1.0, Kompilieren SDK Version 23 und Build-Tools Version 23.0.2.

Für mich war es ein Proguard-Problem. die folgende Zeile in Ihrer proguard Konfiguration hinzufügen:

-keep class android.support.v7.widget.LinearLayoutManager { *; } 

Siehe Android Open Source Project Issue Tracker

+0

Danke Mann! Ich hatte das gleiche Problem und ich weiß nicht, wie ich es ohne Ihre Hilfe lösen würde :). – box

+0

Für mich schließt die Macht Caused by: java.lang.ClassNotFoundException: android.support.v7.widget.LinearLayoutManager und damit die richtige Lösung für mich – neelabh

+0

Das löst eigentlich ein anderes Problem aber trotzdem schön hier zu haben – frostymarvelous

1

Ja, ich auch bekam gleiche Fehler. Wenn Sie Fehler prüfen sorgfältig u wird durch folgende Zeile verursacht finden: java.lang.OutOfMemoryError: Es konnte keine 276.203.532 Byte-Zuordnung mit 12.108.696 freien Bytes und 174MB bis OOM

zuzuteilen Dies kann durch Minimierung der Auflösung von Bildern behoben welche für Menü verwendet werden.

Verwandte Themen