安卓Fragment中监听onKey事件

本文介绍了一种在Android开发中解决Fragment监听OnKey事件的方法。通过Activity实现OnKey事件并判断当前Fragment是否为目标Fragment,然后调用相应Fragment的静态方法来处理事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值