Fragment中没有监听返回键的方法,只有Activity中才有
定义BaseActivity,重写onKeyDown方法,分发给Fragment中的监听器:
public abstract class BaseActivity extends AppCompatActivity {public interface OnKeyDownListener {/**** @param keyCode* @param event* @return 返回true,表示拦截处理完key事件后不再调用Activity.super.onKeyDown;返回false表示调用 (super.onKeyDown不调用的话返回键的功能会不生效,比如无法返回键退出Activity)*/boolean onKeyDown(int keyCode, KeyEvent event);}private OnKeyDownListener mOnKeyDownListener;public void setOnKeyDownListener(OnKeyDownListener onKeyDownListener) {mOnKeyDownListener = onKeyDownListener;}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if (mOnKeyDownListener != null && mOnKeyDownListener.onKeyDown(keyCode, event)) {return true;} else {return super.onKeyDown(keyCode, event);}}
}
Fragment中:
((BaseActivity) getActivity()).setOnKeyDownListener(new BaseActivity.OnKeyDownListener() {@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if (event.getAction() == KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_BACK) {//这里面写你监听返回键后要执行的代码。我这里是判断如果菜单打开,按返回键就隐藏菜单,然后返回true,则此次返回键不会退出页面if (isMenuShow()) {showMenu(false);return true;}}return false;}
});