Sergio Sergio - 27 days ago 9
Android Question

Navigation drawer, listen to item clicked events

I have this menu layout "navigation_menu.xml":

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

<item
android:id="@+id/item1"
android:title="@string/item1"/>

<item
android:id="@+id/item2"
android:title="@string/item2"/>

<item
android:id="@+id/item3"
android:title="@string/item3"/>

</menu>


My main activity layout "activity_main.xml" is this:

<android.support.v4.widget.DrawerLayout
android:id="@+id/drawer_layout"
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"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".MainActivity">

<android.support.design.widget.NavigationView
android:layout_width="wrap_content"
android:layout_height="match_parent"
app:menu="@menu/navigation_menu"
android:layout_gravity="start">


</android.support.design.widget.NavigationView>

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


And this is the Java code of the main activity where I initialize the drawer:

private DrawerLayout drawer_layout;
private ActionBarDrawerToggle toggle;

@Override
protected void onCreate(Bundle savedInstanceState) {
// ...
drawer_layout = (DrawerLayout)findViewById(R.id.drawer_layout);
toggle = new ActionBarDrawerToggle(this, drawer_layout, R
.string.open_drawer, R.string.close_drawer);
drawer_layout.addDrawerListener(toggle);
toggle.syncState();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
// ...
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (toggle.onOptionsItemSelected(item)) {
return true;
}
return super.onOptionsItemSelected(item);
}


The drawer opens and closes correctly, but I don't know how to do something when an item is clicked, for example showing a log.

Does anyone know?

Thanks

Answer

Use onNavigationItemSelected() method to handle Navigation Drawer Item Click. See Below Code.

    private NavigationView mNavigationView;
    @Override
  protected void onCreate(Bundle savedInstanceState)
  {
    // ...
    mNavigationView = (NavigationView) findViewById(R.id.nav_view);
    mNavigationView.setNavigationItemSelectedListener(this);// you need to set Listener.
    }




 @SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item)
{
   // mDrawer.closeDrawer(GravityCompat.START);
    switch (item.getItemId()) {
        case R.id.item1: {

        }
        break;
        case R.id.item2: {

        }
        break;
        case R.id.item3: {

        }
        break;

    }
    return true;
}