Android 监听系统返回键实现Fragment返回上一级
项目需求:在Fragment页面监听系统返回键实现返回上一级Fragment页面
项目场景:Fragment多层嵌套导致导致在第二级Fragment点击系统返回键直接退出最外层
百度好多家博主都po了通过接口回调的方式在BaseFragment中定义onBackListener接口 在最外层activity(也就是多层Fragment外壳)监听系统返回键 然后Fragment继承BaseFragment拿到Activity的监听事件 觉得很麻烦 不过本博主也不是望而生怯的人 自己试了试接口回调的方式 没有实现返回上一级的需求。。。。。就试着自己的思路来写 以下为本人实现思路 我的Fragment上下级使用的容器是FrameLayout
实现方式:
1--->最外层activity实现onBackPress方法(注:有些时候onBackPress方法没有onKeyDown方法好用 当然如有有监听事件冲突的话 要使用dispatchKeyEvent方法 )
2--->监听点击事件为返回键->Back_event 在这里判断当前Fragment是否为需要处理返回上一级逻辑的Fragment
3--->如果是 通过EventBus传递判断方法->EventBus.getDefault().post("event")
4-->需处理上一级逻辑Fragment注册EventBus 并接收事件进行判断
po上代码最为直观
//最外层Fragment监听返回事件
@Override
public void onBackPressed(){
super.onBackPressed()
if(mCurrentFragment==目标Fragment){
EventBus.getDefault().post("chargeBack");
}else{
finish()
}
}
//目标Fragment
//注册EventBus
override fun onResume(){
EventBus.getDefault().register(this)
}
//EventBus接收事件
@Subscribe(threadMode==ThreadMode.Main)
fun onEvent(mStr : String) {
if(mStr=="chargeBack"){
//这里自行添加返回上一级逻辑
}
}
以上 为我的实现方式 自认为相比于定义接口简单多些 当然 如有疑问 欢迎指出