通过按后退按钮禁止取消操作模式

ATo*_*Tom 15 android android-actionbar

getActivity().startActionMode(calback);按下后退按钮后,通过呼叫启动的操作模式将自动取消.有可能避免这种行为吗?在动作模式下,在某些情况下按下后退按钮后,我需要再做一次操作.

Tom*_*mik 31

这是一个有趣的问题.当ActionMode处于活动状态时,后退键事件将在内部使用.事件不会传播到任何一个onBackPressed()onKeyUp(int keyCode, KeyEvent event)回调.

幸运的是,你可以使用dispatchKeyEvent(KeyEvent event)仍然被调用的.

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
    if(mActionModeIsActive) {
        if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
           // handle your back button code here
           return true; // consumes the back key event - ActionMode is not finished
        }
    }
    return super.dispatchKeyEvent(event);
}
Run Code Online (Sandbox Code Playgroud)

您可能想知道在ActionMode中有子菜单并使用后退键关闭它时会出现什么行为.在这种情况下dispatchKeyEvent()不会调用,因此您可以安全地使用代码.

上面的代码也适用于ActionBarSherlock.我发现的唯一问题是在使用原生ActionMode时在Android 3.1设备上,在这种情况下,dispatchKeyEvent()不会调用它.使用ActionBarSherlock的ActionMode来解决它.

  • 在Android 3.1设备上,如果不使用ActionBarSherlock,则不会调用`dispatchKeyEvent()`.如果您使用它,则会调用它(ActionBarSherlock使用ActionBar for Android 3.x的自定义实现). (3认同)
  • 这个答案对我不起作用。关于我的问题有什么想法吗?http://stackoverflow.com/questions/32683145/prevent-back-button-whilst-actionmode-is-active (2认同)