在很多场景下,我们需要 Fragment 监听物理 back 键,而不是 Activity,这个时候我们只能做一些处理,来让 Fragment 拦截。
首先在 Fragment 中自定义回调方法,如下:
public boolean onBackPressed() {EventBus.getDefault().post(new ClosexxxxxEvent()); // 做我们想做的处理return true; // return true 代表自己处理}
然后,在 Activity 的 onBackPressed 方法中,进行相应的处理:
@Overridepublic void onBackPressed() {if (mxxxxxxFragment == null) { // 获取到你的 Fragment 实例mxxxxxxFragment = (BaseFragment) getSupportFragmentManager().findFragmentById(R.id.xxxxxx).getChildFragmentManager().findFragmentById(R.id.xxxxx);}if (mxxxxxxFragment != null && mxxxxxxFragment instanceof xxxxxxFragment&& !mxxxxxxFragment.isHidden()&& ((xxxxxxFragment) mxxxxxxFragment).onBackPressed()) { // 判断是否是我们需要的 Fragmentreturn; // 拦截 Activity 的 back 监听}super.onBackPressed();}
完!!!