У меня есть основное действие, которое расположено с двумя навигационными ящиками. Левый всегда доступен, но правый используется для отображения некоторых необходимых списков и выполнения определенных действий. Когда у меня есть определенные фрагменты, загруженные в центр 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()
или проверить координаты, которые нажаты на событие касания. Просто любопытно, есть ли у кого более простой способ.