Danyal Fayyaz
Danyal Fayyaz

Reputation: 51

Application crashes when i start navigation drawer

The application works fine unless i start the navigation drawer activity. Its been three days and i am stuck with this issue. Below is the java code of activity :

    package com.example.danyal.p2android;

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.view.View;
import android.support.design.widget.NavigationView;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
public class Home_Menu extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home__menu);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
//        setActionBar(toolbar);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawer.setDrawerListener(toggle);
        toggle.syncState();

        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);
    }

    @Override
    public void onBackPressed() {
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else {
            super.onBackPressed();
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.home__menu, 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);
    }

    @SuppressWarnings("StatementWithEmptyBody")
    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        // Handle navigation view item clicks here.
        int id = item.getItemId();

        if (id == R.id.nav_camera) {
            // Handle the camera action
        } else if (id == R.id.nav_gallery) {

        } else if (id == R.id.nav_slideshow) {

        } else if (id == R.id.nav_manage) {

        } else if (id == R.id.nav_share) {

        } else if (id == R.id.nav_send) {

        }

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }
}

Navigation drawer Menu

    <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <group android:checkableBehavior="single">
        <item
            android:id="@+id/nav_camera"
            android:title="Import" />
        <item
            android:id="@+id/nav_gallery"
            android:title="Gallery" />
        <item
            android:id="@+id/nav_slideshow"
            android:title="Slideshow" />
        <item
            android:id="@+id/nav_manage"
            android:title="Tools" />
    </group>

    <item android:title="Communicate">
        <menu>
            <item
                android:id="@+id/nav_share"
                android:title="Share" />
            <item
                android:id="@+id/nav_send"
                android:title="Send" />
        </menu>
    </item>

</menu>

activity_home_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<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_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:openDrawer="start">

    <include
        layout="@layout/app_bar_home__menu"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header_home__menu"
        app:menu="@menu/activity_home__menu_drawer" />

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

Application Manifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.danyal.p2android">

    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.READ_PROFILE" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

    <!--
         The ACCESS_COARSE/FINE_LOCATION permissions are not required to use
         Google Maps Android API v2, but you must specify either coarse or fine
         location permissions for the 'MyLocation' functionality. 
    -->
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".Login"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".Register"
            android:label="@string/title_activity_register"
            android:theme="@style/AppTheme.NoActionBar" />
        <!--
             The API key for Google Maps-based APIs is defined as a string resource.
             (See the file "res/values/google_maps_api.xml").
             Note that the API key is linked to the encryption key used to sign the APK.
             You need a different API key for each encryption key, including the release key that is used to
             sign the APK for publishing.
             You can define the keys for the debug and release targets in src/debug/ and src/release/. 
        -->

        <activity
            android:name=".NearestHospitals"
            android:label="@string/title_activity_nearest_hospitals" />

        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />
        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="KEY" />

        <activity
            android:name=".TestMAP"
            android:label="@string/title_activity_test_map"
            android:theme="@style/AppTheme.NoActionBar" />
        <activity
            android:name=".Home_Menu"
            android:label="@string/title_activity_home__menu"
            android:theme="@style/Theme.AppCompat.Light"
            ></activity>
    </application>

</manifest>

Logcat :

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.danyal.p2android/com.example.danyal.p2android.Home_Menu}: android.view.InflateException: Binary XML file line #16: Error inflating class android.support.design.widget.NavigationView
                                                                            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2338)
                                                                            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390)
                                                                            at android.app.ActivityThread.access$800(ActivityThread.java:151)
                                                                            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321)
                                                                            at android.os.Handler.dispatchMessage(Handler.java:110)
                                                                            at android.os.Looper.loop(Looper.java:193)
                                                                            at android.app.ActivityThread.main(ActivityThread.java:5299)
                                                                            at java.lang.reflect.Method.invokeNative(Native Method)
                                                                            at java.lang.reflect.Method.invoke(Method.java:515)
                                                                            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:829)
                                                                            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:645)
                                                                            at dalvik.system.NativeStart.main(Native Method)
                                                                         Caused by: android.view.InflateException: Binary XML file line #16: Error inflating class android.support.design.widget.NavigationView
                                                                            at android.view.LayoutInflater.createView(LayoutInflater.java:620)
                                                                            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
                                                                            at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
                                                                            at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
                                                                            at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
                                                                            at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
                                                                            at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:276)
                                                                            at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:136)
                                                                            at com.example.danyal.p2android.Home_Menu.onCreate(Home_Menu.java:21)
                                                                            at android.app.Activity.performCreate(Activity.java:5264)
                                                                            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088)
                                                                            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2302)
                                                                            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390) 
                                                                            at android.app.ActivityThread.access$800(ActivityThread.java:151) 
                                                                            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321) 
                                                                            at android.os.Handler.dispatchMessage(Handler.java:110) 
                                                                            at android.os.Looper.loop(Looper.java:193) 
                                                                            at android.app.ActivityThread.main(ActivityThread.java:5299) 
                                                                            at java.lang.reflect.Method.invokeNative(Native Method) 
                                                                            at java.lang.reflect.Method.invoke(Method.java:515) 
                                                                            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:829) 
                                                                            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:645) 
                                                                            at dalvik.system.NativeStart.main(Native Method) 
                                                                         Caused by: java.lang.reflect.InvocationTargetException
                                                                            at java.lang.reflect.Constructor.constructNative(Native Method)
                                                                            at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
                                                                            at android.view.LayoutInflater.createView(LayoutInflater.java:594)
                                                                            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696) 
                                                                            at android.view.LayoutInflater.rInflate(LayoutInflater.java:755) 
                                                                            at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 
                                                                            at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
                                                                            at android.view.LayoutInflater.inflate(LayoutInflater.java:353) 
                                                                            at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:276) 
                                                                            at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:136) 
                                                                            at com.example.danyal.p2android.Home_Menu.onCreate(Home_Menu.java:21) 
                                                                            at android.app.Activity.performCreate(Activity.java:5264) 
                                                                            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088) 
                                                                            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2302) 
                                                                            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390) 
                                                                            at android.app.ActivityThread.access$800(ActivityThread.java:151) 
                                                                            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321) 
                                                                            at android.os.Handler.dispatchMessage(Handler.java:110) 
                                                                            at android.os.Looper.loop(Looper.java:193) 
                                                                            at android.app.ActivityThread.main(ActivityThread.java:5299) 
                                                                            at java.lang.reflect.Method.invokeNative(Native Method) 
                                                                            at java.lang.reflect.Method.invoke(Method.java:515) 
                                                                            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:829) 
                                                                            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:645) 
                                                                            at dalvik.system.NativeStart.main(Native Method) 
                                                                         Caused by: java.lang.NoClassDefFoundError: android.support.design.internal.NavigationMenu
                                                                            at android.support.design.widget.NavigationView.<init>(NavigationView.java:104)
                                                                            at android.support.design.widget.NavigationView.<init>(NavigationView.java:95)
                                                                            at java.lang.reflect.Constructor.constructNative(Native Method) 
                                                                            at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
                                                                            at android.view.LayoutInflater.createView(LayoutInflater.java:594) 
                                                                            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696) 
                                                                            at android.view.LayoutInflater.rInflate(LayoutInflater.java:755) 
                                                                            at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 
                                                                            at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
                                                                            at android.view.LayoutInflater.inflate(LayoutInflater.java:353) 
                                                                            at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:276) 
                                                                            at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:136) 
                                                                            at com.example.danyal.p2android.Home_Menu.onCreate(Home_Menu.java:21) 
                                                                            at android.app.Activity.performCreate(Activity.java:5264) 
                                                                            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088) 
                                                                            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2302) 
                                                                            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390) 
                                                                            at android.app.ActivityThread.access$800(ActivityThread.java:151) 
                                                                            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321) 
                                                                            at android.os.Handler.dispatchMessage(Handler.java:110) 
                                                                            at android.os.Looper.loop(Looper.java:193) 
                                                                            at android.app.ActivityThread.main(ActivityThread.java:5299) 
                                                                            at java.lang.reflect.Method.invokeNative(Native Method) 
                                                                            at java.lang.reflect.Method.invoke(Method.java:515) 
                                                                            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:829) 
                                                                            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:645) 
                                                                            at dalvik.system.NativeStart.main(Native Method) 

Anyone please check this :(

Upvotes: 0

Views: 1583

Answers (2)

Parama Sudha
Parama Sudha

Reputation: 2623

Try this...It may work.

Next to this line

NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);

add the following,

View header = navigationView.getHeaderView(0);

Upvotes: 1

Anurag
Anurag

Reputation: 156

Make your DrawerLayout and NavigationView as instance variables, i.e. declare them as global variable in the class. Initialize them only ones in the onCreate() method and use the same variable in all the methods.

Upvotes: 1

Related Questions