2012-04-03 12 views
5

Hola,viewpager + webview, cómo detener webview cargando

He creado una aplicación que utiliza ViewPager y todas las páginas contienen WebViews. Cada vista Web contiene imágenes de servidor, videos, mp3 ...

Los ajustes son WebView

 public Object instantiateItem(View collection, int position) { 
      . 
      . 
      . 

      final RelativeLayout imageLayout = (RelativeLayout)   
      inflater.inflate(R.layout.omb_webview_layout, null); 
      WebView webview = (WebView) imageLayout.findViewById(R.id.video_view); 
      ProgressBar pbImage = (ProgressBar) imageLayout.findViewById(R.id.progressBar1); 

      webview.requestFocus(View.FOCUS_DOWN); 
      webview.getSettings().setBuiltInZoomControls(false); 
      webview.getSettings().setSupportZoom(true); 
      webview.getSettings().setUseWideViewPort(true); 
      webview.getSettings().setJavaScriptEnabled(true); 
      webview.getSettings().setLoadWithOverviewMode(true); 
      webview.getSettings().setUseWideViewPort(true); 
      webview.setWebViewClient(new mWebViewClient()); 
      webview.getSettings().setPluginsEnabled(true); 
      webview.clearCache(true); 
      webview.clearHistory(); 
      if(Pbar != null) { 
       webview.setWebChromeClient(new WebChromeClient() { 
       public void onProgressChanged(WebView view, int progress)  { 
        Log.i(TAG, "webview loading progress : "+ progress); 
        if(progress == 100) { 
         try { 
          Pbar.setVisibility(ProgressBar.GONE); 
         } catch (Exception e) { 
         Log.e(TAG, "timer progress GONE : "+ progress,e); 
         } 
         } 
      }); 
      } 

El problema es cuando las páginas se pasáses entonces también esta línea

Log.i(TAG, "webview loading progress : "+ progress); 

está ejecutando lo que significa que las vistas web se cargan en segundo plano. Si deslizo 4 páginas o más, se cargan todas las vistas web.

 destroyItem(View collection, int position, Object o) { 
    Log.d("DESTROY", "destroying view at position sheetal " + position); 

      RelativeLayout view = (RelativeLayout)o; 

        WebView tmp = webviewDictionary.get(position);; 

      tmp.getSettings().setJavaScriptEnabled(false); 
          tmp.stopLoading(); 
     if(tmp != null){ 
         Log.i(TAG, "sheetal webview is destroyed " +position); 
         try { 
          tmp.onPause(); 

          tmp.loadDataWithBaseURL("about:blank", "<html></html>","text/html", "UTF-8", null); 
          tmp=null; 
          // tmp.destroy(); 
         } 
         catch (Exception e) { 
          Log.i(TAG, "webview destroyed Exception 0" ,e); 
         } 
        } 

Cómo detener la carga de fondo si las páginas no están visibles? setOffscreenPageLimit (1) (significa 3 páginas prev, cur, next),

En Viewpager, la página 2 (significa página de 1 posición) no se carga correctamente. Muestra una página blanca en blanco, ¿cómo la resuelvo?

Gracias de antemano

+0

he utilizado StopLoading(), pero no dejan de dosis de carga del fondo, siempre que sea destroyItem (.. .) se llama webview stop the loading right? pero no para de cargar –

+0

No del todo seguro, pero ¿no necesita configurar OffscreenPageLimit en 0? – THelper

+0

intenté pager.OffscreenPageLimit (0) pero no funciona. –

Respuesta

2

esto resolvió mi problema.

he creado un diccionario, contiene 3 vistas web con la posición como clave.

webviews aquí estoy añadiendo en el diccionario de

public Object instantiateItem(View collection, int position) { 
    . 
    . 
    . 
    webviewDictionary.put(position, webView); 
    . 
    . 
    . 
} 

webviews limpieza es de diccionario

public void cleanAllWebViews() { 

    try { 

     if(webviewDictionary != null){ 

      Iterator<Integer> webViewIterator = webviewDictionary.keySet().iterator(); 

      while(webViewIterator.hasNext()) { 

       Integer key=(Integer)webViewIterator.next(); 

       WebView webView = (WebView) webviewDictionary.get(key); 


       webView.stopLoading(); 
       //     webView.pauseTimers(); 

       webView.setWebChromeClient(null); 
       webView.setWebViewClient(null); 


       webView.loadDataWithBaseURL("about:blank", "<html></html>","text/html", "UTF-8", null); 
       webViewIterator.remove(); 

      } 
     } 

     webviewDictionary = null; 


    }catch (Exception e) { 
     Log.e(TAG, "ombook last call onPauseAllWebviews Exception",e ); 
    } 
} 

    and 

    @Override 
public void onBackPressed() { 

    cleanAllWebViews(); 

    System.gc(); 

    super.onBackPressed(); 
} 
1

has necesitado "OffscreenPageLimit" establecido en 1? 0 es un valor no válido de acuerdo con este mensaje: ViewPager.setOffscreenPageLimit(0) doesn't work as expected

también, has de manejar algunos eventos de cambio entre las páginas, por lo que cada vez que se cambia una página, vistas web de la página actual se detendrá la carga, o inicio cargando un archivo html vacío?

+1

sí, mientras navego por las páginas he pausado la vista web (webview.onPause()) –

+1

¿funcionó? si es así, ¿puede publicar el código correspondiente? –