我有一个主要活动,它带有两个导航抽屉。左边的总是可访问的,但右边的用于显示一些必要的列表和执行某些操作。当我将某些片段加载到FrameLayout
活动的中心时,它们具有需要打开右抽屉并选择项目的操作。所有这一切都很好,但我想确保当按下后退按钮或在抽屉外单击屏幕时,抽屉关闭、锁定并删除加载的片段。我还应该提到,这个右边的抽屉里有一个FrameLayout
并依赖于碎片。
在我的主要活动中,这就是我所说的:
@Override
public void onBackPressed(){
Log.d(TAG, "onBackPressed() called");
if(drawerLayoutRight.isDrawerOpen(drawerFrameRight)){
Log.d(TAG, "----------------------");
drawerLayoutRight.closeDrawer(drawerFrameRight);
drawerLayoutRight.setDrawerLockMode(1, drawerFrameRight);
ExcerciseList fragment = (ExcerciseList) getFragmentManager().findFragmentById(R.id.right_drawer);
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.remove(fragment).commit();
} else {
super.onBackPressed();
}
}
我也试过:
public boolean onKeyDown(int keyCode, KeyEvent event){
if (keyCode == KeyEvent.KEYCODE_BACK) {
Log.d(TAG, "onKeyDown called");
return true;
}
return super.onKeyDown(keyCode, event);
}
但这也没有奏效。每当我单击后退按钮时,抽屉都会关闭,但这些方法都不会被调用。但是一旦抽屉关闭,如果按下后退按钮,这些方法将被调用。我还想知道是否有人知道处理抽屉外点击的简单方法。我想我可以进行自定义DrawerLayout
并覆盖drawerClose()
或检查在触摸事件上单击的坐标。只是好奇是否有人有更简单的方法。