2016-02-29 13 views
5

Mam MapView wewnątrz fragmentu, który tworzy WebView i ładowany adres URL.WebView onPageFinished nie wywołano, gdy jest widoczny MapView.

Urządzenie WebView ładuje się prawidłowo, jeśli MapView jest ukryty (android:visibility="gone"). Ale kiedy jest to widoczne, wywoływana jest nazwa WebView onPageStarted(), ale onPageFinished() nigdy nie jest wywoływana.

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"); 

kilka uwag:

  1. Gdybym opuścić Mapa Zobacz ukryty, WebView ładuje się dobrze.

  2. Zaloguj Tylko wiadomość po onPageStarted() - D/cr_Ime: [ImeAdapter.java:587] odłączyć

  3. Nic w onReceivedError() lub innych zwrotnych o błędach.

+0

Po prostu masz MapView i WebView w jednym fragmencie. Mam rację ? –

+0

Tylko wewnątrz fragmentu 'MapView'. Webview jest używany jako 'webView = new WebView (getActivity()) ;, więc możesz powiedzieć, że należy on do działania, a nie do tego konkretnego fragmentu. –

+0

wypróbowałeś moje rozwiązanie? –

Odpowiedz

2

Zrobiłem tak, to działa dobrze dla mnie.

Użyłem MapFragment zamiast 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/"); 
} 

}

w moim przypadku onPageStarted & onPageFinished zarówno wyzwalane są coraz.

Zrzut:

enter image description here

Edit 1: Właściwie MapView zawsze ostrość podczas inicjalizacji więc gdy proces MapView inicjalizacji robiony prośbą ostrość do WebView.

Mam nadzieję, że to ci pomoże.

+0

To nie działało. W rzeczywistości próbowałem z MapFragment 1, a następnie przeniosłem się do MapView. BTW jak to się różni od kodu, który napisałem (oprócz zastąpienia MapView z MapFragment). Dzięki. –

+0

@ Archie.bpgc, czy możesz spróbować zmienić adres URL na inny? –

+0

Tak, próbowałem z 'webView.loadUrl (" http://stackoverflow.com/ ")' nadal tak samo. –

-1

Android Webview nie obsługuje mapy, dlatego nie jest wyświetlany.