2016-02-29 15 views
5

WebViewと読み込みURLを作成するフラグメント内にMapViewがあります。MapViewが表示されているときにWebView onPageFinishedが呼び出されない

MapViewが非表示(android:visibility="gone")の場合は、WebViewが正常にロードされます。しかし、それが可視になると、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()に何も、または任意の他のエラーコールバックを取り外していません。

+0

基本的にMapViewとWebViewは1つのフラグメント内にあります。私は正しいですか? –

+0

フラグメント内の 'MapView'だけです。 WebViewは 'webView = new WebView(getActivity());'として使用されます。したがって、この特定のフラグメントではなくActivityに属していると言えます。 –

+0

あなたは私のソリューションを試しましたか? –

答えて

2

私はこのようにしています。それは私のためにうまくいきます。

MapViewの代わりにMapFragmentを使用しました。

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:WebViewに要求フォーカスを行ってMapView初期化プロセスに一度ので、実際にMapViewは常に初期化しながら、フォーカスを取ります。

希望すると、これが役立ちます。

+0

これは機能しませんでした。実際に私はMapFragment 1stで試してからMapViewに移動しました。ところで、これはMapViewをMapFragmentに置き換えた点を除いて、私が投稿したコードとどう違うのですか?ありがとう。 –

+0

@ Archie.bpgc、URLを別のURLに変更してみてください。 –

+0

はい私は 'webView.loadUrl(" http://stackoverflow.com/ ")でもまだ同じことを試みました。 –

-1

Android Webviewでは、地図がサポートされていないため、表示されません。

関連する問題