笔记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 条评论
登录 后参与评论

相关文章

来自专栏我和未来有约会

Silverlight第三方控件专题

这里我收集整理了目前网上silverlight第三方控件的专题,若果有所遗漏请告知我一下。 名称 简介 截图 telerik 商 RadC...

4095
来自专栏菩提树下的杨过

Flash/Flex学习笔记(23):运动学原理

先写一个公用的小球类Ball: package{ import flash.display.Sprite; //小球 类 public class B...

25410
来自专栏pangguoming

Spring Boot集成JasperReports生成PDF文档

由于工作需要,要实现后端根据模板动态填充数据生成PDF文档,通过技术选型,使用Ireport5.6来设计模板,结合JasperReports5.6工具库来调用渲...

1.2K7
来自专栏我和未来有约会

Kit 3D 更新

Kit3D is a 3D graphics engine written for Microsoft Silverlight. Kit3D was inita...

2636
来自专栏飞扬的花生

jsencrypt参数前端加密c#解密

      写程序时一般是通过form表单或者ajax方式将参数提交到服务器进行验证,如何防止提交的请求不被抓包后串改,虽然无法说绝对安全却给非法提交提高了难度...

3929
来自专栏魂祭心

原 canvas绘制clock

4294
来自专栏转载gongluck的CSDN博客

cocos2dx 打灰机

#include "GamePlane.h" #include "PlaneSprite.h" #include "BulletNode.h" #include...

5686
来自专栏一个会写诗的程序员的博客

Spring Reactor 项目核心库Reactor Core

Non-Blocking Reactive Streams Foundation for the JVM both implementing a Reactiv...

2232
来自专栏跟着阿笨一起玩NET

c#实现打印功能

2932
来自专栏陈仁松博客

ASP.NET Core 'Microsoft.Win32.Registry' 错误修复

今天在发布Asp.net Core应用到Azure的时候出现错误InvalidOperationException: Cannot find compilati...

4878

扫码关注云+社区