前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >笔记64 | 个人项目“易来”开发记录《二》处理Fragment中返回的问题

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

作者头像
项勇
发布2018-06-19 14:59:08
5320
发布2018-06-19 14:59:08
举报
文章被收录于专栏:项勇项勇

需求描述

问题:

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

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

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

处理方案

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

代码语言:javascript
复制
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:

代码语言:javascript
复制
public boolean onBackPressed() {
        if (webView.canGoBack()) {
            webView.goBack();
            return true;
        }else{
            return false;
        }
    }
...
protected BackHandLerInterface backHandLerInterface;

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


本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-01-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 项勇 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 需求描述
  • 处理方案
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档