前言
fragment中加载webview如果不处理返回键
那么当你打开多个H5页面的时候 会一次性回退到根级
有时候我们需要一个缓冲 就是一级一级退出 给人一个良好的体验
该怎么做呢?
废话不多说 直接上代码
定义接口
定义一个接口 传入view
/**
* Author :Lyudony.
* Created :2021/2/10
* Description :定义接口 传入view
*
*/
public interface BackHandledInterface {
void setSelectedFragment(BackHandledFragment selectedFragment);
}
写一个基类Fragment
public abstract class BackHandledFragment extends BaseFragment {
private BackHandledInterface mBackHandledInterface;
/**
* 所有继承BackHandledFragment的子类都将在这个方法中实现物理Back键按下后的逻辑
* FragmentActivity捕捉到物理返回键点击事件后会首先询问Fragment是否消费该事件
* 如果没有Fragment消息时FragmentActivity自己才会消费该事件
*/
public abstract boolean onBackPressed();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (!(getActivity() instanceof BackHandledInterface)) {
throw new ClassCastException
("Hosting Activity must implement BackHandledInterface");
} else {
this.mBackHandledInterface = (BackHandledInterface) getActivity();
}
}
@Override
public void onStart() {
super.onStart();
//告诉FragmentActivity,当前Fragment在栈顶
mBackHandledInterface.setSelectedFragment(this);
}
}
MainActivity中处理 物理返回键
别忘了 让MainActivityimplements BackHandledInterface接口
//处理Fragment中的返回键
private BackHandledFragment mBackHandedFragment;
@Override
public void setSelectedFragment(BackHandledFragment selectedFragment) {
this.mBackHandedFragment = selectedFragment;
}
@Override
public void onBackPressed() {
if (mBackHandedFragment == null || !mBackHandedFragment.onBackPressed()) {
if (getSupportFragmentManager().getBackStackEntryCount() == 0) {
if ((System.currentTimeMillis() - lastTime) > 2000) {
lastTime = System.currentTimeMillis();
ToastUtils.showShort(this, "再点击一次退出程序", Gravity.CENTER);
} else {
super.onBackPressed();
}
} else {
getSupportFragmentManager().popBackStack(); //fragment 出栈
}
}
}
别忘了 让MainActivityimplements BackHandledInterface接口
最后 方法
在你使用的fragment中继承基类BackHandledFragment
然后重写父类抽象方法 onBackPressed()
判断
@Override
public boolean onBackPressed() {
//如果webview有上一层 就返回上一层
if (mWebView.canGoBack()) {
mWebView.goBack();
return true;
} else {
//交给父类
return false;
}
}
如此 便解决了Fragment中加载webview对物理返回键的监听
总结
现在是 2021 02 10 凌晨 2:29 明天就是除夕了
一个人在异乡 真的好孤单 : (
为了理想 努力吧!
本文介绍了一种在Android应用中处理Fragment内WebView返回键的方法,通过定义接口和基类Fragment,实现了一级一级退出的用户体验,避免了直接退回到根级的问题。
794

被折叠的 条评论
为什么被折叠?



