ghost deathrider
ghost deathrider

Reputation: 151

How to implement onClick for the "home" option in navigation-drawer?

I'm learning android app development now, I am not getting on how to add onClick event in navigation-drawer. I tried other answers in StackOverflow, they all mentioned the "onNavigationItemSelected" method but it is removed in the new android studio. This is the auto-generated code when I selected navigation-drawer activity at start of the project.

package com.example.navigationdrawerapp;

import android.os.Bundle;

import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;

import android.view.MenuItem;
import android.view.View;

import androidx.annotation.NonNull;
import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI;

import com.google.android.material.navigation.NavigationView;

import androidx.drawerlayout.widget.DrawerLayout;

import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;

import android.view.Menu;

public class MainActivity extends AppCompatActivity {

    private AppBarConfiguration mAppBarConfiguration;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        FloatingActionButton fab = 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 = findViewById(R.id.drawer_layout);
        NavigationView navigationView = findViewById(R.id.nav_view);
        // Passing each menu ID as a set of Ids because each
        // menu should be considered as top level destinations.
        mAppBarConfiguration = new AppBarConfiguration.Builder(
                R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow,
                R.id.nav_tools, R.id.nav_share, R.id.nav_send)
                .setDrawerLayout(drawer)
                .build();
        NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
        NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
        NavigationUI.setupWithNavController(navigationView, navController);


    }

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

    @Override
    public boolean onSupportNavigateUp() {
        NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
        return NavigationUI.navigateUp(navController, mAppBarConfiguration)
                || super.onSupportNavigateUp();
    }

}

Upvotes: 1

Views: 2244

Answers (2)

Thaw De Zin
Thaw De Zin

Reputation: 1669

You need to use setNavigationItemSelectedListener not onNavigationItemSelected.

navigatoinView.setNavigationItemSelectedListener { item ->
item.isChecked = true
when(item.itemId)
    R.id.home -> Toast.makeText(application,"Home", Toast.LENGTH_SHORT).show()
    R.id.gallery -> Toast.makeText(application,"Gallery", Toast.LENGTH_SHORT).show()
    R.id.slideshow -> Toast.makeText(application,"Slideshow", Toast.LENGTH_SHORT).show()
    }
drawer.closeDrawers()
true
}

Upvotes: 2

justArandomUser
justArandomUser

Reputation: 116

onNavigationItemSelected() is a function that is generated automatically , it will never be removed from android because it's a part of NavigationView.class (an java class). if you dont have it , you can simply override it by yourself :

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

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

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

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

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

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

    }

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

Upvotes: 0

Related Questions