7

Tôi đã làm theo hướng dẫn về cách triển khai navigationView từ thư viện hỗ trợ thiết kế và tôi không thể thoát khỏi lỗi này bên dưới. Tôi đã đọc các giải pháp khác được đăng trên trang web này, nhưng không ai trong số họ làm việc cho tôi, xin vui lòng giúp đỡ.Lỗi khi tăng cấp 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 Gây ra bởi: android.view.InflateException: Dòng tệp XML nhị phân # 28: Lỗi lạm phát lớp android.support.design.widget.NavigationView Gây ra bởi: java.lang.reflect.InvocationTargetException Gây ra bởi: android. view.InflateException: Đường dẫn tệp nhị phân XML # 2: Lỗi lạm phát lớp android.widget.RelativeLayout Gây ra bởi: java.lang.reflect.InvocationTargetException Gây ra bởi: java.lang.OutOfMemoryError: Không thể cấp phát một phân bổ byte 276203532 với 12108696 miễn phí byte và 174MB cho đến khi oom

EDIT 2: vấn đề có vẻ là trong header.xml

+0

bạn có thể thêm nhiều hơn từ dấu vết ngăn xếp liên quan của mình –

+0

@Diyoda chỉ chỉnh sửa nó –

Trả lời

6

Nó al l bắt đầu từ đây,

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) 

Bởi vì một hình ảnh mà bạn đang sử dụng cho tiêu đề hoặc như các yếu tố trong navigationdrawer của bạn có độ phân giải cao hơn so với các ứng dụng được phân bổ bộ nhớ có thể xử lý. Giảm kích thước hình ảnh và kiểm tra. Điều đó sẽ giải quyết vấn đề. Nếu bạn thêm một số dấu vết ngăn xếp khác bên dưới, bạn có thể tìm thấy yếu tố nào chính xác gây ra sự cố này.

+1

Không vấn đề gì. Vui vì tôi có thể giúp đỡ bạn. –

6

Tôi gặp lỗi inflater cho chế độ xem Điều hướng khi chuyển sang thư viện hỗ trợ Android phiên bản 23.1.0, biên dịch SDK phiên bản 23 và công cụ xây dựng phiên bản 23.0.2.

Đối với tôi, hóa ra đó là vấn đề bảo vệ. Thêm dòng sau vào cấu hình Proguard của bạn:

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

Xem Android Open Source Project Issue Tracker

+0

Cảm ơn người đàn ông! Tôi đã có cùng một vấn đề chính xác và tôi không biết làm thế nào tôi sẽ giải quyết nó mà không cần sự giúp đỡ của bạn :). – box

+0

Đối với tôi, Lực lượng đóng được cho là Nguyên nhân bởi: java.lang.ClassNotFoundException: android.support.v7.widget.LinearLayoutManager và do đó sửa chữa đúng cho tôi – neelabh

+0

Điều này thực sự giải quyết được một vấn đề khác nhưng vẫn tốt đẹp khi có ở đây – frostymarvelous

1

Vâng, tôi quá có lỗi tương tự. Nếu bạn nhìn vào lỗi kỹ u sẽ tìm thấy sau dòng Nguyên nhân: java.lang.OutOfMemoryError: Không thể phân bổ một phân bổ 276.203.532 byte với 12.108.696 byte miễn phí và 174MB cho đến khi oom

này được lon giải quyết bằng cách giảm thiểu độ phân giải của hình ảnh được sử dụng cho menu.

Các vấn đề liên quan