前言
之前讲过Activity向fragment传值的知识。这节讲下当Activity中加载有Fragment时,对于Activity和Fragment中对于返回键的处理。
今天涉及的内容有:
- Activity与Fragment返回键逻辑处理流程梳理
- Activity中对返回键处理的代码逻辑
- Fragment中对返回键处理的代码逻辑
- 效果图和项目结构图
先看下效果图:
一. Activity与Fragment返回键逻辑处理流程梳理
在一般Activity中加载了Fragment后,不做任何处理的时候。在弹出Fragment的时候,点击界面返回键,是直接响应Activity的返回键,即退出当前Activity的。
但是在我们开发的过程中,希望的是在Activity中没有加载Fragment的时候,点击返回键是响应Activity界面的返回事件,而在有Fragment显示的时候,点击返回键则响应Fragment的返回键处理。
二.Activity中对返回键处理的代码逻辑
ok,了解了Activity和Fragment对于返回键处理的需求,然后结合之前我讲过的Activity向Fragment传值的问题,下面就来讲讲具体的处理吧。
在MainActivity中声明一个返回键处理的接口:
private OnFragmentBackListener mOnFragmentBackListener;
public void setOnFragmentBackListener(OnFragmentBackListener listener){
this.mOnFragmentBackListener=listener;
}
/**返回键接口**/
public interface OnFragmentBackListener{
void onbackForward();
}
在MainActivity中做两个界面跳转的功能,一个跳转FragmentA,一个跳转FragmentB,其中FragmentB中用于处理返回键的问题。
下面看看,MainActivity中跳转FragmentA和FragmentB的代码:
@Override
public void onClick(View v) {
super.onClick(v);
switch (v.getId()) {
case R.id.btn_confirm://a按钮
//关闭mFragmentB
AppFragmentManager.getInstance().finishFragmentByTag(TAG_A,mContext);
//打开mFragmentA
mFragmentA= (FragmentA) AppFragmentManager.getInstance().startFragment(R.id.fr_layout,mContext, TAG_A, null, new AppFragmentManager.OnCreateFragmentListener() {
@Override
public Fragment createFragment() {
return new FragmentA();
}
});
break;
case R.id.btn_test://b按钮
mFragmentB= (FragmentB) AppFragmentManager.getInstance().startFragment(R.id.fr_layout, mContext,TAG_B, null, new AppFragmentManager.OnCreateFragmentListener() {
@Override
public Fragment createFragment() {
return new FragmentB();
}
});
break;
default:
break;
}
}
然后在MainActivity 中重写返回键功能: