1. 有时我们需要在Fragment中处理返回事件(onBackPressed())
如果你有封装BaseFragment,可以这样处理
public abstract class BaseFragment extends Fragment {
...
/*
* fragment中的返回键
*
* 默认返回false,交给Activity处理
* 返回true:执行fragment中需要执行的逻辑
* 返回false:执行activity中的 onBackPressed
* */
public boolean onBackPressed() {
return false;
}
}
在需要处理返回事件的Fragment去继承该BaseFragment并重写onBackPressed()方法
public class ExampleFragment extends BaseFragment {
...
//isHandleBack为true拦截Activity的返回事件
/*重写父类的onBackPressed*/
public boolean onBackPressed() {
if (isHandleBack) {
//点击了返回键Fragment的处理逻辑
return isHandleBack;
}
return isHandleBack;
}
}
在使用此Fragment的Activity中重写onBackPressed()方法
@Override
public void onBackPressed() {
List<Fragment> fragments = getSupportFragmentManager().getFragments();
for (Fragment fragment : fragments) {
/*如果是自己封装的Fragment的子类 判断是否需要处理返回事件*/
if (fragment instanceof BaseFragment) {
if (((BaseFragment) fragment).onBackPressed()) {
/*在Fragment中处理返回事件*/
return;
}
}
}
super.onBackPressed();
}
2. 有时遇到ParentFragment中添加ChildFragment并要求点击返回ParentFragment的需求
我们可以这样处理
1.Activity中重写onBackPressed()
@Override
public void onBackPressed() {
List<Fragment> fragments = getSupportFragmentManager().getFragments();
for (Fragment fragment : fragments) {
/*如果是自己封装的Fragment的子类 判断是否需要处理返回事件*/
if (fragment instanceof BaseFragment) {
if (((BaseFragment) fragment).onBackPressed()) {
/*在Fragment中处理返回事件*/
return;
}
}
}
super.onBackPressed();
}
2.ParentFragment
public class Example1Fragment extends BaseFragment {
...
public void addFragment(Fragment fragment){
getChildFragmentManager()
.beginTransaction()
.add(R.id.container, fragment)
.addToBackStack(null)
.commit();
}
@Override
public boolean onBackPressed() {
List<Fragment> fragments = getChildFragmentManager().getFragments();
for (Fragment fragment : fragments) {
/*如果是自己封装的Fragment的子类 判断是否需要处理返回事件*/
if (fragment instanceof BaseFragment) {
if (((BaseFragment) fragment).onBackPressed()) {
/*在Fragment中处理返回事件*/
return true;
}
}
}
return false;
}
}
3.ChildFragment
public class Example1Fragment extends BaseFragment {
...
/*重写父类的onBackPressed*/
@Override
public boolean onBackPressed() {
if(getParentFragment() != null){
getParentFragment().getChildFragmentManager().popBackStack();
return true;
}
return false;
}
}