My NavigationView
onClick
event is not working.
Here are the code snippets I tried one by one, but nothing worked:
NavigationView.OnNavigationItemSelectedListener
using OnClick()
MethodSetting NavigationItemSelectedListener
method
nav = (NavigationView)findViewById(R.id.nav);
nav.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem item) {
Toast.makeText(getApplicationContext(),"Hello",Toast.LENGTH_SHORT).show();
return true;
}
});
Using OnOptionItemSelected()
Method
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(toggle.onOptionsItemSelected(item))
{
return true;
}
switch (item.getItemId()) {
case R.id.lib:
Toast.makeText(getApplicationContext(),"OK",Toast.LENGTH_SHORT).show();
return true;
case R.id.fav:
Toast.makeText(getApplicationContext(),"OK",Toast.LENGTH_SHORT).show();
return true;
}
return super.onOptionsItemSelected(item);
}
I also tried all these question and blogs relevant to my question but it didn't work.
Here is my Complete MainActivity.java file:
public class MainActivity extends AppCompatActivity{
public frag_song song;
public frag_artist artist;
public frag_album album;
public TabLayout tab;
Uri songUri;
Cursor songCursor;
public static LinearLayout mainLayout;
int songTitle,songArtist,duration,data,songAlbum;
public NavigationView nav;
public DrawerLayout layout;
public ActionBarDrawerToggle toggle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME);
//actionBar.setIcon(R.drawable.logo);
mainLayout = (LinearLayout)findViewById(R.id.main);
//All Stuff Of NAvigatin Drawer
layout = (DrawerLayout)findViewById(R.id.drawerL);
toggle = new ActionBarDrawerToggle(MainActivity.this,layout,R.string.open,R.string.close);
layout.addDrawerListener(toggle);
toggle.syncState();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
nav = (NavigationView)findViewById(R.id.nav);
nav.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem item) {
Toast.makeText(getApplicationContext(),"Hello",Toast.LENGTH_SHORT).show();
return true;
}
});//Not Working
nav.setItemIconTintList(null);
//check if app open first time or not
SharedPreferences prefs = this.getSharedPreferences("com.blackhat.rhythmbox", Context.MODE_PRIVATE);
Boolean first = prefs.getBoolean("first", true);
if(first){
//Adding song To Database
addtoDatabase();
prefs.edit().putBoolean("first",false).commit();
}
//Decaring Object of Fragment
//TO access Tab
tab = (TabLayout)findViewById(R.id.tabs);
song = new frag_song();
artist = new frag_artist();
album = new frag_album();
//addding tab to tab layout
tab.addTab(tab.newTab().setText("Songs"),true);
tab.addTab(tab.newTab().setText("ALbum"));
tab.addTab(tab.newTab().setText("Artist"));
tab.getTabAt(0).setIcon(R.drawable.icons_song);
tab.getTabAt(1).setIcon(R.drawable.icons_album);
tab.getTabAt(2).setIcon(R.drawable.icon_artist);
//setting default tab
FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction().replace(R.id.frame_container,song).commit();
//on tab select
tab.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
switch (tab.getPosition())
{
case 0 :
FragmentManager f_song = getSupportFragmentManager();
f_song.beginTransaction().replace(R.id.frame_container,song).commit();
break;
case 1 :
FragmentManager f_artist = getSupportFragmentManager();
f_artist.beginTransaction().replace(R.id.frame_container,album).commit();
break;
case 2 :
FragmentManager f_album = getSupportFragmentManager();
f_album.beginTransaction().replace(R.id.frame_container,artist).commit();
break;
}
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
}
@Override
protected void onStop() {
super.onStop();
}
public void addtoDatabase(){
song_db dbHelper = new song_db(getApplicationContext());
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues contentValues = new ContentValues();
ContentResolver contentResolver = getContentResolver();
songUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
songCursor = contentResolver.query(songUri, null, null, null, null);
//checking if cursor is null or not
if(songCursor !=null && songCursor.moveToFirst()){
songTitle = songCursor.getColumnIndex(MediaStore.Audio.Media.TITLE);
songArtist = songCursor.getColumnIndex(MediaStore.Audio.Media.ARTIST);
duration = songCursor.getColumnIndex(MediaStore.Audio.Media.DURATION);
songAlbum = songCursor.getColumnIndex(MediaStore.Audio.Media.ALBUM);
data = songCursor.getColumnIndex(MediaStore.Audio.Media.DATA);
Toast.makeText(getApplicationContext(),"Loaded",Toast.LENGTH_SHORT).show();
do{
contentValues.put("name",songCursor.getString(songTitle));
contentValues.put("artist",songCursor.getString(songArtist));
contentValues.put("album",songCursor.getString(songAlbum));
contentValues.put("path",songCursor.getString(data));
contentValues.put("duration",songCursor.getString(duration));
contentValues.put("isfavorite",0);
contentValues.put("playlist","regular");
// contentValues.put("name",songCursor.getString(songArtist));
db.insert("songs",null,contentValues);
}while (songCursor.moveToNext());
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(toggle.onOptionsItemSelected(item))
{
return true;
}
return super.onOptionsItemSelected(item);
}
}
I had the same problem, and I discovered that Android is VERY particular about the layout XML. I had my NavigationView as the first child of the DrawerLayout, but it has to be the last child for some stupid reason. So your layout must have the elements in this order:
<DrawerLayout>
<FrameLayout/>
<NavigationView/>
</DrawerLayout>
NOT in this order:
<DrawerLayout>
<NavigationView/>
<FrameLayout/>
</DrawerLayout>
This worked for me, to bring the view to the front
navigationView.setNavigationItemSelectedListener(this);
navigationView.bringToFront();
If you are getting more issue and want to understand Navigation Drawer things, Create a new project and select Navigation Drawer layout or Checkout below code:
Use below code :
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
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 MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
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);
//add this line to display menu1 when the activity is loaded
displaySelectedScreen(R.id.nav_menu1);
}
@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.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);
}
private void displaySelectedScreen(int itemId) {
//creating fragment object
Fragment fragment = null;
//initializing the fragment object which is selected
switch (itemId) {
case R.id.nav_menu1:
fragment = new Menu1();
break;
case R.id.nav_menu2:
fragment = new Menu2();
break;
case R.id.nav_menu3:
fragment = new Menu3();
break;
}
//replacing the fragment
if (fragment != null) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.content_frame, fragment);
ft.commit();
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
}
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
//calling the method displayselectedscreen and passing the id of selected menu
displaySelectedScreen(item.getItemId());
//make this method blank
return true;
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With