在Fragment中监听返回键

最近在做项目的时候,遇见这么一个需求,需要在Fragment中监听返回键,点击返回键的时候做一些处理。

如图所示:当我需要处理fragment的返回事件时,这个时候拦截Activity对返回键的处理,先处理fragment中的逻辑,不需要时,直接交给activity处理即可。

这里写图片描述

其实实现的方式很简单,就是在activity中调fragment的返回事件即可。

代码示例:
首先我们写项目的时候一般都会对Fragment和Activity进行封装,我们先来写一个Fragment的基类,这里我封装了对返回键的处理.

package com.esp.testfragmentback;
import android.util.Log;
/**
 * Created by yzq on 2017/8/30.
 * 封装一个Fragment
 */
public class Fragment extends android.support.v4.app.Fragment {

    /*
     * fragment中的返回键
     *
     * 默认返回flase,交给Activity处理
     * 返回true:执行fragment中需要执行的逻辑
     * 返回false:执行activity中的 onBackPressed
     * */
    public boolean onBackPressed() {
        return false;
    }


}

Activity中的代码:
在Activity中的onBackPressed进行判断即可

   @Override
    public void onBackPressed() {
        List<Fragment> fragments = getSupportFragmentManager().getFragments();

        for (Fragment fragment : fragments) {
            /*如果是自己封装的Fragment的子类  判断是否需要处理返回事件*/
            if (fragment instanceof com.esp.testfragmentback.Fragment) {
                if (((com.esp.testfragmentback.Fragment) fragment).onBackPressed()) {
                    /*在Fragment中处理返回事件*/
                    return;
                }
            }
        }
        super.onBackPressed();
    }

具体的Fragment:
重写父类的onBackPressed即可,在这里面做处理

    /*重写父类的onBackPressed*/
    public boolean onBackPressed() {

        if (isHandleBack) {
            Toast.makeText(getActivity(), "点击了返回键", Toast.LENGTH_SHORT).show();
            return isHandleBack;
        }

        return isHandleBack;
    }

Fragment的全部代码:

package com.esp.testfragmentback;


import android.os.Bundle;

import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;


/**
 * A simple {@link Fragment} subclass.
 */
public class OneFragment extends Fragment implements View.OnClickListener {

    private boolean isHandleBack = false;

    private Button trueBtn, falseBtn;
    public OneFragment() {

    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_one, container, false);

        trueBtn = view.findViewById(R.id.trueBtn);
        falseBtn = view.findViewById(R.id.falseBtn);

        trueBtn.setOnClickListener(this);
        falseBtn.setOnClickListener(this);

        return view;
    }


    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.trueBtn:
                isHandleBack = true;
                break;

            case R.id.falseBtn:
                isHandleBack = false;
                break;
        }
    }



    /*重写父类的onBackPressed*/
    public boolean onBackPressed() {

        if (isHandleBack) {
            Toast.makeText(getActivity(), "点击了返回键", Toast.LENGTH_SHORT).show();
            return isHandleBack;
        }

        return isHandleBack;
    }
}


下面是demo,csdn现在强制要积分了,最低1分,我也很绝望啊

demo

©️2020 CSDN 皮肤主题: 书香水墨 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值