在传单中创建一个圆圈而不重新加载webview

时间:2017-03-28 00:19:15

标签: javascript java android webview leaflet

在android studio中,我通过webview调用传单地图如下:

@Override
 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
     final View rootView = inflater.inflate(R.layout.activity_main, container, false);
     final WebView webView = (WebView) rootView.findViewById(webview);

     webView.getSettings().setJavaScriptEnabled(true);
     webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
     webView.getSettings().setGeolocationEnabled(true);
     webView.setEnabled(true);
     webView.setClickable(true);
     GeoClient geo = new GeoClient();
     webView.setWebChromeClient(geo);
     String origin = "";
     geo.onGeolocationPermissionsShowPrompt(origin, this);
     webView.loadUrl("file:///android_asset/Map.html");

     return rootView;
 }

现在,我有一个后台服务正在运行偶尔会发生火灾,我想在发生这种情况时在地图上显示一个圆圈。要从java运行javascript函数,将使用以下内容

    webView.setWebViewClient(new WebViewClient() {
        public void onPageFinished(WebView view, String url) {
            webView.loadUrl("javascript:fireCircle(" +
                    43.0000000 + "," +
                    -79.4000000 + "," +
                    300 + ",\"" +
                    "A CIRCLE!" + "\")");
        }
    });

其中传单javascript函数fireCircle读为

  function fireCircle(lat, lng, rad, textTitle){
      var circleColor = 'red';
      var circle = L.circle([lat, lng], rad, {
              color: circleColor,
              fillColor: circleColor,
              fillOpacity: 0.5
          })
      .bindPopup(String(textTitle))
      .addTo(map); 
  }

到目前为止,我发现允许圆圈出现在地图上的唯一方法是完全重新加载webview页面(onCreateView每次都创建一个新实例)。当服务随机触发时,这是不可接受的。

是否可以在不重新加载javascript页面的情况下触发该功能?

1 个答案:

答案 0 :(得分:0)

我认为你想要的是在fireCircle函数运行后重新渲染地图。 请参阅this tpic。 简短的回答:

php /var/www/ci_folder/index.php controller_name function_name

希望它有效!