2017-03-28 7 views
1

が、私はWebViewの通過リーフレットマップを呼び出すの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!" + "\")"); 
     } 
    }); 

どこ機能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); 
    } 

として読み込み、JavaScriptのリーフレット、私は円ができるようにするために見つけた唯一の方法を使用することだろうマップに表示されるのはwebviewページの完全なリロードです(onCreateViewは毎回新しいインスタンスを作成します)。これは、サービスがランダムに実行されている場合は受け入れられません。

javascriptページをリロードせずに機能を起動することはできますか?

答えて

0

fireCircle関数が実行された後にマップを再作成することをお勧めします。 thisをご覧ください。 短答:

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); 
     **map.invalidateSize();** 
    } 

希望します。

関連する問題