在Fragment中监听返回键
程序员文章站
2022-06-08 17:58:15
...
最近在做项目的时候,遇见这么一个需求,需要在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分,我也很绝望啊