2016-02-29 63 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不支持地圖,這就是爲什麼它不顯示。

相關問題