Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Navigation drawer Items not registering click event

Tags:

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.

like image 729
J4C3N-14 Avatar asked Feb 21 '14 17:02

J4C3N-14


People also ask

How to set navigation drawer in Android?

To add a navigation drawer, first declare a DrawerLayout as the root view. Inside the DrawerLayout , add a layout for the main UI content and another view that contains the contents of the navigation drawer.

What is navigation drawer?

Android Navigation Drawer is a sliding left menu that is used to display the important links in the application. Navigation drawer makes it easy to navigate to and fro between those links. It's not visible by default and it needs to opened either by sliding from left or clicking its icon in the ActionBar.


2 Answers

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

like image 110
user3798518 Avatar answered Sep 28 '22 09:09

user3798518


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

@Override public void onDrawerOpened(View drawerView) {  }  
like image 42
aobrazcova Avatar answered Sep 28 '22 08:09

aobrazcova