onKeyDown的使用
Activity可以通过重写onKeyDown(int keyCode, KeyEvent event),很容易的监听物理返回键事件,而Fragment并不能重写物理键监听事件。在一个Activity多个Fragment页面的应用中,很多时候有必要的监听每个Fragment返回事件,并对每个Fragment做特殊的数据处理。如果将每个Fragment的返回事件都在FragmentActivity中监听消费,那么其onBackPressed()的代码将会比较混乱;
Activity的onKeyDown
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {//按下返回键
moveTaskToBack(false);//让程序进入后台但不销毁 这里写自己的逻辑代码就可以了
return true;//消费了返回事件
}
return super.onKeyDown(keyCode, event);
}
返回 true 表示已经消耗了返回的时间,返回false表示没有消耗,依旧会执行返回。
Fragment的onKeyDown
@Override
public void onResume() {
super.onResume();
getView().setFocusableInTouchMode(true);
getView().requestFocus();
getView().setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View view, int keyCode, KeyEvent keyEvent) {
if (keyCode == KeyEvent.KEYCODE_BACK && keyEvent.getAction() == KeyEvent.ACTION_UP) {
//拦截到的返回事件
return true;
}
return false;
}
});
}
getView返回的就是你的根布局view,setFocusable这个是用键盘是否能获得焦点,setFocusableInTouchMode这个是触摸是否能获得焦点。