最近Android项目中需要实现webview与js交互,网上推荐的框架是https://github.com/lzyzsd/JsBridge
基于jsbridge调用实现webview与js交互具体用法作者已详细讲解不再解释,本文主要说在实现webview交互后想监听webview的onPageStarted及onPageFinished实现加载动画的坑。
js交互代码

//  JS调JAVA   重点: Java端需要注册事件监听,即webView.registerHandler()。PHP需要做的工作:重写接口回调,        webView.registerHandler("goodsInfo", new BridgeHandler() {            @Override            public void handler(String data, CallBackFunction function) {                Logger.json(data);                Map<String, Object> map = JSONFormat.jsonToMap(data);                String param = (String) map.get("goodsid");                aCache.put("goodsname", map.get("goodsname") + "");                aCache.put("goodsimg", "http://" + URLutile.PHPURL + "/" + map.get("goodsimg") + "");                Intent intent = new Intent(HelpMallActivity.this, GoodsDetailActivity.class);                intent.putExtra("param", param);                startActivity(intent);            }        });

交互后重点是监听webview的onPageStarted及onPageFinished实现加载动画
用的代码是

webView.setWebViewClient(new WebViewClient()        {            @Override            public void onPageFinished(WebView view, String url)            {                super.onPageFinished(view, url);                stopMyDialog();            }            @Override            public void onPageStarted(WebView view, String url, Bitmap favicon)            {                super.onPageStarted(view, url, favicon);                startMyDialog();            }        });

后发现js交互不能用了,开始查看jsBridge源码发现BridgeWebViewClient中已经重新写了onPageStarted及onPageFinished的监听,两个冲突了,js交互也就不能用了。

解决办法
新建一个WebViewClient继承BridgeWebViewClient

package com.yskj.lsk.widget.circleimageview;import android.content.Context;import android.graphics.Bitmap;import android.webkit.WebView;import com.github.lzyzsd.jsbridge.BridgeWebView;import com.github.lzyzsd.jsbridge.BridgeWebViewClient;import com.yskj.lsk.util.MyLoading;/** * Created by jianghe on 2016/11/18 0018. */public class LocalWebViewClient extends BridgeWebViewClient {    private MyLoading myloading;    private Context context;    public LocalWebViewClient(BridgeWebView webView) {        super(webView);    }    public LocalWebViewClient(BridgeWebView webView, Context context){        super(webView);        this.context = context;    }    @Override    public void onPageStarted(WebView view, String url, Bitmap favicon) {        super.onPageStarted(view, url, favicon);        startMyDialog();    }    @Override    public void onPageFinished(WebView view, String url) {        super.onPageFinished(view, url);        stopMyDialog();    }    /**    * dialog 启动    */    public void startMyDialog() {        if (myloading == null) {            myloading = MyLoading.createLoadingDialog(context);        }        if (!myloading.isShowing()) {            myloading.show();        }    }    /**     * dialog 销毁     */    public void stopMyDialog() {        if (myloading != null) {            if (myloading.isShowing()){                myloading.dismiss();            }            myloading = null;        }    }}

再在web中调用
//监听加载开始和加载结束
webView.setWebViewClient(new LocalWebViewClient(webView,context));
后一切正常

更多相关文章

  1. Android(安卓)EditText 设置键盘 搜索,回车
  2. android rom移植知识普及
  3. Android中为TextView增加自定义的HTML标签
  4. 编写高效的android代码(译文)
  5. android ICS横竖屏定制及利用G-Sensor转屏的代码兼容
  6. Android(安卓)studio 配置Git (第一次提交代码)
  7. [置顶] 【Android应用开发】Android(安卓)Studio - MAC 版 - 快
  8. Android下打印调试堆栈方法
  9. 关于Android中传递对象发现问题随笔

随机推荐

  1. android json httppost方式联网
  2. android弹出下拉选择菜单,单选,多选
  3. android 中让activity全屏幕显示
  4. 安卓第三次作业
  5. xbmc 从android_main启动时的部分步骤记
  6. RelativeLayout
  7. Android富文本图文混排、粗体、斜体、图
  8. Github Actions Android(安卓)CI打包配置
  9. android 学习记录
  10. Python基础——列表、元组、字典