viewpager + webview, как остановить загрузку webview - PullRequest
5 голосов
/ 03 апреля 2012

Привет,

Я создал приложение, которое использует ViewPager, и все страницы содержат WebViews.Каждое веб-представление содержит изображения сервера, видео, mp3 ...

Настройки 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);
                        }
                         }
            });
            }

Проблема заключается в том, что при перелистывании страниц также отображается эта строка

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

выполняется, что означает, что веб-просмотры загружаются в фоновом режиме.Если я пролистываю 4 или более страниц, загружаются все веб-просмотры.

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

Как остановить фоновую загрузку, если страницы не видны?setOffscreenPageLimit (1) (означает 3 страницы назад, курс, следующий),

В Viewpager 2 страницы (означает 1 страницу позиции) загружается неправильно.Он показывает пустую белую страницу, как мне ее решить?

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 10 июля 2012

это решило мою проблему.

Я создал словарь, он содержит 3 веб-просмотра с позицией в качестве ключа.

здесь я добавляю просмотры в словаре

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

очистка веб-просмотров из словаря

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 голос
/ 22 апреля 2012

вы пробовали установить для "OffscreenPageLimit" значение 1? 0 является недопустимым значением согласно этому сообщению: ViewPager.setOffscreenPageLimit (0) не работает должным образом

также пытались ли вы обработать некоторые события переключения между страницами, чтобы при каждом переключении страницы веб-просмотр текущей страницы прекращал загрузку или начинал загрузку пустого HTML-файла?

...