Navigation drawer Items not registering click event

23,866

Solution 1

The problem is the z ordering. When you expand the list in onDrawerOpened put:

mDrawerList.bringToFront();
mDrawerLayout.requestLayout();

In this post explain the problem and how fix it: http://vardhan-justlikethat.blogspot.com.es/2014/05/android-custom-navigation-drawer-not.html

Solution 2

Fixed a similar issue by adding drawerView.bringToFront(); to

@Override
public void onDrawerOpened(View drawerView) {

} 

Solution 3

If you have a list in Navigation Drawer then just write the code and make listview clickable:

list.bringToFront();
drawerLayout.requestLayout(); 

Solution 4

You should check if you have android:animateLayoutChanges="true" attribute on ListView parent(in layout resource). Removing that attribute worked for me.

Share:
23,866

Related videos on Youtube

J4C3N-14
Author by

J4C3N-14

I'm an amateur enthusiast of Android, struggling but enjoying teaching myself to program.

Updated on March 17, 2020

Comments

  • J4C3N-14
    J4C3N-14 about 4 years

    I am struggling to get the Navigation drawer items to register and start and intent for a new activity. The drawer opens fine and is displayed correctly but nothing happens when I click on the items in the list. Here is my code that is taken from the google tutorials.

    mTitle = mDrawerTitle = getTitle();
               mTitles = getResources().getStringArray(R.array.menu_items);
               mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
               mDrawerList = (ListView) findViewById(R.id.left_drawer);
    
               // set a custom shadow that overlays the main content when the drawer opens
               mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);
               // set up the drawer's list view with items and click listener
               mDrawerList.setAdapter(new ArrayAdapter<String>(this,
                       R.layout.drawer_list_item, mTitles));
               mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
    
               // enable ActionBar app icon to behave as action to toggle nav drawer
               getActionBar().setDisplayHomeAsUpEnabled(true);
               getActionBar().setHomeButtonEnabled(true);
    
               // ActionBarDrawerToggle ties together the the proper interactions
               // between the sliding drawer and the action bar app icon
               mDrawerToggle = new ActionBarDrawerToggle(
                       this,                  /* host Activity */
                       mDrawerLayout,         /* DrawerLayout object */
                       R.drawable.ic_drawer,  /* nav drawer image to replace 'Up' caret */
                       R.string.drawer_open,  /* "open drawer" description for accessibility */
                       R.string.drawer_close  /* "close drawer" description for accessibility */
                       ) {
                   public void onDrawerClosed(View view) {
                       getActionBar().setTitle(mTitle);
                       invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
                   }
    
                   public void onDrawerOpened(View drawerView) {
                       getActionBar().setTitle(mDrawerTitle);
                       invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
                   }
               };
               mDrawerLayout.setDrawerListener(mDrawerToggle);
    
              // if (savedInstanceState == null) {
                   selectItem(0);
               }
    
    
           @Override
           public boolean onCreateOptionsMenu(Menu menu) {
               MenuInflater inflater = getMenuInflater();
               inflater.inflate(R.menu.main, menu);
               return super.onCreateOptionsMenu(menu);
           }
    
           /* Called whenever we call invalidateOptionsMenu() */
           @Override
           public boolean onPrepareOptionsMenu(Menu menu) {
               // If the nav drawer is open, hide action items related to the content view
               boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
             //  menu.findItem(R.id.action_websearch).setVisible(!drawerOpen);
               return super.onPrepareOptionsMenu(menu);
           }
    
           @Override
           public boolean onOptionsItemSelected(MenuItem item) {
                // The action bar home/up action should open or close the drawer.
                // ActionBarDrawerToggle will take care of this.
               if (mDrawerToggle.onOptionsItemSelected(item)) {
                   return true;
               }
                   return super.onOptionsItemSelected(item);       
               }
    
    
           /* The click listner for ListView in the navigation drawer */
           private class DrawerItemClickListener implements ListView.OnItemClickListener {
               @Override
               public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                   selectItem(position);
               }
           }
    
           private void selectItem(int position) {
               switch (position) {
               case 1:
                   new DataTask(MainActivity.this).execute();   
                   MainActivity.this.finish();//Set this Activity to Finish so no loop back       
                   Intent intent=new Intent(MainActivity.this,SplashScreen.class);
                   startActivity(intent);
                   break;
               case 2:
                  // ft.replace(R.id.content_frame, new SecondFragment());
                //  setTitle("Second");
                   break;
               case 3:
                  // ft.replace(R.id.content_frame, new ThirdFragment());
                //   setTitle("Third");
                   break;
    
               default:
                   break;
               }
               // update selected item and title, then close the drawer
               mDrawerList.setItemChecked(position, true);
               //setTitle(mTitles[position]);
               mDrawerLayout.closeDrawer(mDrawerList);
           }
    
           @Override
           public void setTitle(CharSequence title) {
               mTitle = title;
               getActionBar().setTitle(mTitle);
           }
    
           /**
            * When using the ActionBarDrawerToggle, you must call it during
            * onPostCreate() and onConfigurationChanged()...
            */
    
           @Override
           protected void onPostCreate(Bundle savedInstanceState) {
               super.onPostCreate(savedInstanceState);
               // Sync the toggle state after onRestoreInstanceState has occurred.
               mDrawerToggle.syncState();
           }
    
           @Override
           public void onConfigurationChanged(Configuration newConfig) {
               super.onConfigurationChanged(newConfig);
               // Pass any configuration change to the drawer toggls
               mDrawerToggle.onConfigurationChanged(newConfig);
           }
    
           /**
            * Fragment that appears in the "content_frame", shows a planet
            */
           public static class PlanetFragment extends Fragment {
               public static final String ARG_PLANET_NUMBER = "planet_number";
    
               public PlanetFragment() {
                   // Empty constructor required for fragment subclasses
               }
    
             //  @Override
            /*   public View onCreateView(LayoutInflater inflater, ViewGroup container,
                       Bundle savedInstanceState) {
                   View rootView = inflater.inflate(R.layout.fragment_planet, container, false);
                   int i = getArguments().getInt(ARG_PLANET_NUMBER);
                   String planet = getResources().getStringArray(R.array.planets_array)[i];
    
                   int imageId = getResources().getIdentifier(planet.toLowerCase(Locale.getDefault()),
                                   "drawable", getActivity().getPackageName());
                   ((ImageView) rootView.findViewById(R.id.image)).setImageResource(imageId);
                   getActivity().setTitle(planet);
                   return rootView;                      */
               }
    

    If you can provide any help that would be great as I am really pulling my hair out on this. Thank you.

    • Endzeit
      Endzeit about 10 years
      Is your selectItem() method being called?
    • J4C3N-14
      J4C3N-14 about 10 years
      Yes it is as the activity starts? but not when I click a list item.
    • Endzeit
      Endzeit about 10 years
      I do not know where the error occurs but I would let my Activity implement the ListView.OnItemClickListener , set the onClickListener of the ListView to this and implement the onItemClick() method in your activity instead of a seperate class.
    • J4C3N-14
      J4C3N-14 about 10 years
      Thanks for your help, ok, how would I get a reference to the item clicked?
    • Shayan Pourvatan
      Shayan Pourvatan about 10 years
      if you don't get your answer yet post xml file, I think can help you, because i had this problem too and I fix that
  • J4C3N-14
    J4C3N-14 about 10 years
    Hi thanks for your help, No unfortunately that doesn't seem to have solved it? any ideas
  • J4C3N-14
    J4C3N-14 over 9 years
    This Fixed it, Thank you.
  • NeviQ-OR
    NeviQ-OR about 9 years
    1st line seems to be enough for me.
  • Anand
    Anand almost 9 years
    i have tried alot over net for two days.. finally this solution is perfect.. Thank you very much
  • Bala Vishnu
    Bala Vishnu about 8 years
    bringToFront(); solved the problem..you saved my day :)
  • Yogesh Seralia
    Yogesh Seralia almost 8 years
    bringToFront() method was the saviour for me. Thanks
  • Tobliug
    Tobliug almost 8 years
    in addition, this function can be find using : mDrawer.addDrawerListener(new DrawerLayout.DrawerListener() { ... }); require support-v4-23.2+
  • Goke Obasa
    Goke Obasa about 7 years
    Thanks, this helped me and is still relevant.
  • Shahzad Afridi
    Shahzad Afridi over 4 years
    Man you are genius +1