setNavigationItemSelectedListener Not Working

后端 未结 3 846
星月不相逢
星月不相逢 2020-11-29 11:22

My NavigationView onClick event is not working.

Here are the code snippets I tried one by one, but nothing worked:

  1. Implementi
相关标签:
3条回答
  • 2020-11-29 11:54

    This worked for me, to bring the view to the front

    navigationView.setNavigationItemSelectedListener(this);
    navigationView.bringToFront();
    
    0 讨论(0)
  • 2020-11-29 12:03

    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;
        }
    
    
    }
    
    0 讨论(0)
  • 2020-11-29 12:09

    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>
    
    0 讨论(0)
提交回复
热议问题