2012-04-03 45 views
5

Xin chào,viewpager + webview, cách dừng xem web tải

Tôi đã tạo một ứng dụng sử dụng ViewPager và tất cả các trang chứa WebViews. Mỗi Webview chứa các hình ảnh máy chủ, video, mp3 ...

Các thiết lập WebView là

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

Vấn đề là khi các trang được swiped sau đó cũng dòng này

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

đang thực hiện điều đó có nghĩa các lượt xem web đang tải trong nền. Nếu tôi vuốt 4 hoặc nhiều trang, tất cả các lần xem trang web sẽ tải.

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

Làm cách nào để dừng tải khi trang không hiển thị? setOffscreenPageLimit (1) (có nghĩa là 3 trang prev, cur, next),

Trong Viewpager, 2 trang (nghĩa là 1 trang vị trí) không tải đúng cách. Nó cho thấy một trang trắng trống, làm thế nào để giải quyết nó?

Cảm ơn trước

+0

tôi đã sử dụng stopLoading(), nhưng nó liều không dừng tải nền, bất cứ khi nào destroyItem (.. .) được gọi là webview dừng tải phải không? nhưng sẽ không ngừng tải. –

+0

Không hoàn toàn chắc chắn, nhưng bạn không cần đặt OffscreenPageLimit thành 0? – THelper

+0

tôi đã thử pager.OffscreenPageLimit (0) nhưng không hoạt động. –

Trả lời

2

điều này đã giải quyết được sự cố của tôi.

tôi đã tạo từ điển, nó chứa 3 chế độ xem web với vị trí là khóa.

WebViews đây tôi đang bổ sung thêm trong từ điển

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

sạch WebViews là từ điển

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

bạn đã thử "OffscreenPageLimit" được đặt thành 1 chưa? 0 là giá trị không hợp lệ theo bài đăng này: ViewPager.setOffscreenPageLimit(0) doesn't work as expected

cũng có, bạn đã cố gắng xử lý một số sự kiện chuyển đổi giữa các trang, để mỗi lần bạn chuyển đổi một trang, chế độ xem trang của trang hiện tại sẽ ngừng tải hoặc bắt đầu tải một tập tin html rỗng?

+1

có, trong khi điều hướng các trang tôi đã tạm dừng chế độ xem web (webview.onPause()) –

+1

nó có hoạt động không? nếu có, bạn có thể vui lòng xuất bản mã có liên quan không? –

Các vấn đề liên quan