2014-09-28 65 views
26

我有一个应用程序使用导航抽屉提供位置列表。在抽屉中,有几个选项(如选择国家,城市等),用户可以在主要活动中显示相应列表之前设置。安卓在抽屉里关闭监听器

用户关闭抽屉时是否有任何可能刷新列表,或者有其他解决方法?我试图寻找教程,但没有发现关于这个抽屉的关闭监听器。 任何建议将有帮助,谢谢!

回答

63

当您设定ActionBarDrawerToggle可以“落实”onDrawerClosedonDrawerOpened回调。从Docs请看下面的例子:

mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, 
      R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close) { 

     /** Called when a drawer has settled in a completely closed state. */ 
     public void onDrawerClosed(View view) { 
      super.onDrawerClosed(view); 
      // Do whatever you want here 
     } 

     /** Called when a drawer has settled in a completely open state. */ 
     public void onDrawerOpened(View drawerView) { 
      super.onDrawerOpened(drawerView); 
      // Do whatever you want here 
     } 
    }; 
// Set the drawer toggle as the DrawerListener 
mDrawerLayout.addDrawerListener(mDrawerToggle); 

编辑:现在setDrawerListener已过时,使用addDrawerListener代替。

+0

OMG,我完全忘了这个!感谢提醒! – rendyhihi 2014-09-28 07:35:16

30

如果您使用ActionBar,reVerse答案也是正确的。如果你只是直接使用DrawerLayout,可以将DrawerListener添加到它:

View drawerView = findViewById(R.id.drawer_layout); 
if (drawerView != null && drawerView instanceof DrawerLayout) { 
    mDrawer = (DrawerLayout)drawerView; 
    mDrawer.setDrawerListener(new DrawerListener() { 
      @Override 
      public void onDrawerSlide(View view, float v) { 

      } 

      @Override 
      public void onDrawerOpened(View view) { 

      } 

      @Override 
      public void onDrawerClosed(View view) { 
       // your refresh code can be called from here 
      } 

      @Override 
      public void onDrawerStateChanged(int i) { 

      } 
     }); 
} 

kit's commentaddDrawerListener()应该现在setDrawerListener()已弃用使用。

+8

如果有人看到这个,不推荐使用'setDrawerListener'。现在应该使用'addDrawerListener' – kit 2016-05-08 19:41:50