项目中越来越多的用到Fragment,在用Fragment中如果要有监听事件的话就遇到了问题,我们都知道,Activity中有OnKey事件,但是Fragment中没有,但是又必须监听OnKey事件怎么办(不仅仅是退出哦),如果仅仅是退出我们可以在Activity中进行统一处理.
方法是这样的:
Activity实现Onkey事件,判断当前的fragment是哪一个,是不是所需要的Fragment,然后在需要监听OnKey事件的Fragment中写一个静态方法,传递keycode与event事件即可。
首先在Activity中可以onkey事件的(被监听的onkey的Fragment也是在当前的Activity中)
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub Log.d("ActionBar", "OnKey事件"); if(fg instanceof GamesFragment){ if(gamesFragment.onKeyDown(keyCode, event)){
return true;
}
} return super.onKeyDown(keyCode, event); }事件中的fg是一个Fragment对象。比如在RadioGroup或ViewPager中切换到时,fg要等于被切换到的Fragment。不然fg要么为空值,要么为你指定的一个定值而已。ViewPager中在切换时可以在onPageSelected方法中使用fg=adapter.setCurrentItem(position)使其变化。
因为我在GamesFragment中返回时有UI上的操作,所以直接使用了gamesFragment对象使onKeyDown不为静态方法。而且在Activity中也有onkey事件的操作,所以加了一个if作判断。
在Fragmentation中的onkey方法为
public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK){ //doSomeString return true; } } return false; }