问题
Good day, can you help me out. I got this error when compiling/running my code on an emulator. This is the sample tutorial I used to make. I used min Target API - 15 and compile the latest gradle
'com.android.support:design:23.0.0'
http://www.android4devs.com/2015/06/navigation-view-material-design-support.html
Code Error:
AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.eccp.projects.ecosavers.ecosavers/com.eccp.projects.ecosavers.ecosavers.activities.MainActivity}: android.view.InflateException: Binary XML file line #29: Binary XML file line #29: Error inflating class android.support.design.widget.NavigationView 12-29 06:43:39.409 3448-3448/com.eccp.projects.ecosavers.ecosavers E/AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
E/AndroidRuntime: Caused by: android.view.InflateException: Binary XML file line #29: Binary XML file line #29: Error inflating class android.support.design.widget.NavigationView
Here are my codes: MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//SET my own toolbar
toolbar = (Toolbar) findViewById(R.id.tool_bar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
mNavigationView = (NavigationView) findViewById(R.id.navigation_view);
mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
if (menuItem.isChecked()) menuItem.setChecked(false);
else menuItem.setChecked(true);
//Closing drawer on item click
mDrawerlayout.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.events:
Toast.makeText(getApplicationContext(), "Inbox Selected", Toast.LENGTH_SHORT).show();
Eco_events fragment = new Eco_events();
android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.frame, fragment);
fragmentTransaction.commit();
return true;
// show a toast on click
case R.id.activities:
Toast.makeText(getApplicationContext(), "Send 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
mDrawerlayout = (DrawerLayout) findViewById(R.id.drawer);
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerlayout, toolbar, R.string.drawerOpened, R.string.drawerOpened) {
@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
mDrawerlayout.setDrawerListener(mDrawerToggle);
//calling sync state is
mDrawerToggle.syncState();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
return super.onOptionsItemSelected(item);
}
XML:activity_main.xml
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context=".MainActivity">
<LinearLayout
android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical"
>
<include
android:id="@+id/tool_bar"
layout="@layout/toolbar"
/>
<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_height="match_parent"
android:layout_width="wrap_content"
android:layout_gravity="start"
app:headerLayout="@layout/header"
app:menu="@menu/drawer"
/> </android.support.v4.widget.DrawerLayout>
回答1:
Follow this steps:
- Right Click on your
Project->Open Module Settings
. - Then open Dependencies Tab.
- Click on + symbol then select Library Dependency.You will get an popup called Choose Library Dependency.
- There Enter "com.android.support". Then click on search icon.
- Now select the design library. and Click on OK.
回答2:
Thank you for your concerns, I appreciate it. I found the answer for (my) this question at last.
Error inflating class android.support.design.widget.NavigationView #28 or #29
The solution that works for me, is that you must match your support design library
and your support AppCompat Library
. In the gradle module,
change the gradle version (Your desired library no. ) You can also find the latest gradle build in the link that I have given, but I suggest you check in your gradle module (The 2nd Picture, since they are first in updating the gradle build. Then in my gradle module - compile: ...
has been highlighted , meaning there is a newer version, just change the no. e.g 24.0.0
compile if it is stable, not preview), in a mean time, mine is 23.1.1
.
-> more gradle lib- gradleplease.appspot.com
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
:) It works for me!
Observation (For me, As I changed/solved this error, the value 23.x.x
): if your support-design
doesn't match with AppCompat-lib
produces #28 and if your AppCompat
doesn't match the support-design
produces #29. Just try, maybe I interchange the #.
回答3:
You are getting this error because you need the Design Support Library.
Open SDK Manager and download Android Support Repository, than you can find the last version of the library here:
<android-sdk>/extras/android/m2repository/com/android/support/design/23.0.1/design-23.0.1.aar
Copy it in your libs directory then add the dependency to your build.gradle:
repositories {
flatDir {
dirs 'libs'
}
}
dependencies {
compile 'android.support.design:design:23.0.1@aar'
}
来源:https://stackoverflow.com/questions/34506163/class-not-found-android-support-design-widget-navigationview