android - 抽屉导航项目未注册点击事件

标签 android android-listview onclick navigation-drawer

我正在努力让抽屉导航项目注册并开始并打算进行新 Activity 。 抽屉可以正常打开并正确显示,但是当我单击列表中的项目时没有任何反应。 这是我从谷歌教程中获取的代码。

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;                      */
           }

如果您能提供任何帮助,那就太好了,因为我真的在这方面大发雷霆。谢谢。

最佳答案

问题在于 z 排序。当您在 onDrawerOpened 中展开列表时:

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

在这篇文章中解释问题以及如何解决它: http://vardhan-justlikethat.blogspot.com.es/2014/05/android-custom-navigation-drawer-not.html

关于android - 抽屉导航项目未注册点击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21941570/

相关文章:

onclick - 单击更改(和更改回)传单图标

iphone - 将 CoreGraphics 混合模式映射到 Porter-Duff

android - 如何将后退按钮操作复制到另一个按钮

android - 将 simpleAdapter 与 ListView 的图像一起使用

android - 从数据库中获取列表并在 Listview 中显示需要很长时间

javascript - 单击 Bootstrap 弹出窗口无任何操作

javascript - 动态添加的类上的事件

java - 如何将maven导入到我的Android Studio项目中?

java - ListView Viewholder 复选框状态

android,带复选框的 ListView