2016-02-29 75 views
5

我在创建WebView和加载URL的片段中有一个MapView当MapView可见时,WebView onPageFinished不会被调用

如果隐藏MapView,则WebView加载的不正确(android:visibility="gone")。但是当它被显示时,将调用WebView的onPageStarted(),但从不会调用onPageFinished()

的MapView:

<com.google.android.gms.maps.MapView 
    android:layout_width="match_parent" 
    android:layout_height="200dp" 
    android:visibility="gone" 
    android:id="@+id/mapView" /> 

的WebView:

webView = new WebView(getActivity()); 
webView.addJavascriptInterface(this, "scraper"); 
WebSettings webSettings = webView.getSettings(); 
webSettings.setUserAgentString("Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0"); 
webSettings.setJavaScriptEnabled(true); 
webSettings.setDomStorageEnabled(true); 

webView.setWebViewClient(new WebViewClient() { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     return true; 
    } 


    @Override 
    public void onPageStarted(WebView view, String url, Bitmap favicon) { 
     super.onPageStarted(view, url, favicon); 
     System.out.println("page start called"); 
    } 

    @Override 
    public void onPageFinished(WebView view, String url) { 
     super.onPageFinished(view, url); 
     System.out.println("page finished called"); 
    } 
}); 

webView.loadUrl("http://denver.craigslist.org/apa/5436947521.html"); 

的小样本:

  1. 如果我离开地图查看隐藏,WebView加载正常。

  2. 只有登录消息后onPageStarted() - d/cr_Ime:[ImeAdapter.java:587]分离

  3. onReceivedError() Nothing或任何其他误差回调。

+0

基本上你有一个片段内的MapView和WebView。我对么 ? –

+0

只是片段内的MapView。 Webview被用作'webView = new WebView(getActivity());'所以你可以说它属于Activity而不是这个特定的片段。 –

+0

你有没有试过我的解决方案? –

回答

2

我已经这样做了,它对我来说工作正常。我使用了MapFragment而不是MapView

fragment_location.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <fragment 
     android:id="@+id/map" 
     android:name="com.google.android.gms.maps.MapFragment" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 

</RelativeLayout> 

LocationFragment.java

public class LocationFragment extends Fragment implements OnMapReadyCallback { 

private static View view; 
private GoogleMap googleMap; 
private double latitude = 23.0300, longitude = 72.5800; 
private WebView webView; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) 
{ 
    if (view != null) { 
     ViewGroup parent = (ViewGroup) view.getParent(); 
     if (parent != null) 
      parent.removeView(view); 
    } 
    try 
    { 
     view = inflater.inflate(R.layout.fragment_location,null); 

     MapFragment mapFragment = (MapFragment) getActivity().getFragmentManager() 
       .findFragmentById(R.id.map); 
     mapFragment.getMapAsync(this); 
    }catch (InflateException e) { 
    /* map is already there, just return view as it is */ 
    } 

    return view; 
} 

@Override 
public void onMapReady(GoogleMap googleMap) { 
    LatLng mLatLong = new LatLng(latitude, longitude); 

    googleMap.setMyLocationEnabled(true); 
    googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(mLatLong, 13)); 

    googleMap.addMarker(new MarkerOptions() 
      .title("MyTitle") 
      .snippet("MySnippet") 
      .position(mLatLong)); 

    if(webView!=null){ 
     webView.requestFocus(); 
    } 
} 


@Override 
public void onResume() { 
    super.onResume(); 

    webView = new WebView(getActivity()); 
    webView.addJavascriptInterface(this, "scraper"); 
    WebSettings webSettings = webView.getSettings(); 
    webSettings.setUserAgentString("Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0"); 
    webSettings.setJavaScriptEnabled(true); 
    webSettings.setDomStorageEnabled(true); 

    webView.setWebViewClient(new WebViewClient() { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      return true; 
     } 


     @Override 
     public void onPageStarted(WebView view, String url, Bitmap favicon) { 
      super.onPageStarted(view, url, favicon); 
      Log.i("WebView", "page start called"); 
     } 

     @Override 
     public void onPageFinished(WebView view, String url) { 
      super.onPageFinished(view, url); 
      Log.i("WebView", "page finished called"); 
     } 
    }); 

    webView.loadUrl("http://stackoverflow.com/"); 
} 

}

在我的情况onPageStarted & onPageFinished都越来越触发。

截图

enter image description here

编辑1:其实MapView总是焦点,同时初始化所以一旦MapView初始化过程中完成的要求重点WebView

希望这会帮助你。

+0

这没有奏效。事实上,我尝试使用MapFragment 1st,然后移动到MapView。顺便说一句,这与我发布的代码有什么不同(除了用MapFragment替换MapView)。谢谢。 –

+0

@ Archie.bpgc,你可以请尝试更改网址到另一个? –

+0

是的,我尝试'webView.loadUrl(“http://stackoverflow.com/”)'仍然是一样的。 –

-1

Android Webview不支持地图,这就是为什么它不显示。

相关问题