我认为DrawerLayout
实现中缺少一个关键点:在抽屉打开之前触发的事件。
drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close) {
public void onDrawerClosed(View view) {
//...
}
public void onBeforeDrawerOpened(View drawerView) {
//...
}
public void onDrawerOpened(View drawerView) {
//...
}
};
需要它的原因是设置抽屉项目的状态,比如选择的菜单项目、启用和类似的状态。将其放入
onDrawerOpened()
回调函数中有点可行,但在打开后改变菜单外观并不是很合适。我的第一个想法是扩展
ActionBarDrawerToggle
并提供新事件。我应该重新发明轮子吗 :-) ,还是已经有人做过了?
newState == DrawerLayout.STATE_DRAGGING
时使用onDrawerStateChanged()
,但它似乎在两个方向上都被调用,即使抽屉关闭时也是如此。 - Gábor