安卓Fragment中监听onKey事件

项目中越来越多的用到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;
}

猜你喜欢

转载自blog.csdn.net/qq_34709057/article/details/80105672