笔记64 | 个人项目“易来”开发记录《二》处理Fragment中返回的问题

需求描述

问题:

一个WebView放在Fragment中,我们都知道webView有一个goBack()方法,可以通过该方法对网页进行后退处理,由于Fragment本身并没有监听onBackPressed的方法,又处于一个Activity中,Activity除又对后退进行了3秒确定退出处理,所有导致

  1. Fragment中的WebView无法进行goBack();
需求:

需要在Fragment中监听到返回键,当WebView可以后退网页的时候,进行后退网页,当没有可后退的网页时(首页状态),点击返回调Activity中的onBackPressed方法;

处理方案

这位大神的方案大神讲得通俗易懂,对我来说难度稍大,实现后再慢慢消化。。。 MianActivity:

public class Main extends FragmentActivity implements OnCheckedChangeListener,Framelayout3.BackHandLerInterface{

public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
...
if (!(getActivity() instanceof BackHandLerInterface)) {
            throw new ClassCastException("Hosting activity must implement BackHandlerInterface");  
        }else{
            backHandLerInterface = (BackHandLerInterface) getActivity();
        }
}
...
@Override
    public void onStart() {
        // TODO Auto-generated method stub
        super.onStart();
        backHandLerInterface.setSelectedFragment(this);
    }
...
private Framelayout3 framelayout3;
private long mTickForShow;
    @Override
    public void onBackPressed() {
        if (framelayout3 == null || !framelayout3.onBackPressed()) {
            backPress();
        }
    }

    public void backPress(){
        if (SystemClock.uptimeMillis()-mTickForShow<3000) {
            finish();
        }else{
            showToast(getString(R.string.gameover));
        }
        mTickForShow=SystemClock.uptimeMillis();
    }
...
    @Override
    public void setSelectedFragment(Framelayout3 backHandledFragment) {
        this.framelayout3 = backHandledFragment;
    }
}

Fragment:

public boolean onBackPressed() {
        if (webView.canGoBack()) {
            webView.goBack();
            return true;
        }else{
            return false;
        }
    }
...
protected BackHandLerInterface backHandLerInterface;

    public interface BackHandLerInterface{
        public void setSelectedFragment(Framelayout3 backHandledFragment);
    }


原文发布于微信公众号 - 项勇(xiangy_life)

原文发表时间:2018-01-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android开发指南

6.下拉刷新

2684
来自专栏向治洪

android 应用模式之mvp

说到MVP就不得不提到MVC,做过J2EE的猿友们肯定知道MVC是个什么东西。MVC即 Model、View、Controller, 那MVP就Model、Vi...

18110
来自专栏知识分享

8-51单片机ESP8266学习-AT指令(测试TCP服务器--51单片机程序配置8266,做自己的手机TCP客户端发信息给单片机控制小灯的亮灭)

http://www.cnblogs.com/yangfengwu/p/8776712.html 先把源码和资料链接放到这里 链接:https://pan.ba...

4022
来自专栏jianhuicode

Fragment 学习笔记(1)

网上关于Fragment相关的博客资料很多,写关于这个知识笔记是加深记忆,大神略过; 0x01 了解Fragment 当然看官方文档(http://www.an...

1745
来自专栏向治洪

qq平台登录

在APP开发过程中,时常会用到第三方账号登录体系。 下面,简要说明QQ的第三方登录体系在Android平台上的运用。 申请APPID 进入QQ互联的官网...

18410
来自专栏developerHaoz 的安卓之旅

手把手教你从零开始做一个好看的 APP - Day five

本文为 手把手教你从零开始做一个好看的 APP - Day five ,如果想看该系列的其他文章,请点击以下连接

842
来自专栏向治洪

检查app的activity是否在当前

APP开发中经常会遇到这种需求,需要检查当前的APP是不是可见的,比如,如果是可见的就维持一个socket长连接,如果切到后台不可见了,就断开这个连接。And...

1809
来自专栏项勇

笔记56 | 管理网络的使用

1446
来自专栏蜉蝣禅修之道

Android之使用JavaMail发送邮件

1352
来自专栏程序员互动联盟

【Android基础】Android利用Intent与其他应用交互

前言: 上一篇博客给大家聊了Intent的定义,分类、属性和功能,相信大家对于Intent在Android中的作用已经清楚,这一篇博客将会给大家聊Intent...

35010

扫码关注云+社区