Fragment(七)——Activity和Fragment返回键的处理

前言

之前讲过Activity向fragment传值的知识。这节讲下当Activity中加载有Fragment时,对于Activity和Fragment中对于返回键的处理。

今天涉及的内容有:

  1. Activity与Fragment返回键逻辑处理流程梳理
  2. Activity中对返回键处理的代码逻辑
  3. Fragment中对返回键处理的代码逻辑
  4. 效果图和项目结构图

先看下效果图:


Fragment(七)——Activity和Fragment返回键的处理_第1张图片
1.gif

一. 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 中重写返回键功能:

你可能感兴趣的:(Fragment(七)——Activity和Fragment返回键的处理)