2014-05-07 188 views
1

我試圖一個接一個地加載多個頁面,每個加載之間間隔30秒。這是我的課:Android WebView不會加載多個頁面

public class MainActivity extends Activity { 

    private WebView wv; 

    @SuppressLint("SetJavaScriptEnabled") 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     wv = new WebView(this); 
     wv.setWebViewClient(new WebViewClient()); 
     wv.getSettings().setJavaScriptEnabled(true); 
     setContentView(wv); 
     String[] urlArr = {"http://www.google.com", "http://www.cnn.com", "http://www.wired.com"}; 
     int delay = 30 * 1000; 
     Handler handler = new Handler(); 
     for(int i = 0; i < urlArr.length; i++) { 
      MyRunnable runnable = new MyRunnable(urlArr[i]); 
      handler.postDelayed(runnable, delay); 
      delay = delay + 30 * 1000; 
     } 
    } 

    private class MyRunnable implements Runnable { 

     private String url; 

     public MyRunnable(String url) { 
      this.url = url; 
     } 

     public void run() { 
      wv.loadUrl(url); 
      Log.d("MainActivity", "PageLoaded: " + url); 
     } 
    } 

} 

所以,邏輯很簡單:我有一個單一的WebView實例。然後,在週期內,我打電話postDelayed()。它僅加載google.com,其他兩個不加載,即使日誌顯示「PageLoaded」。有沒有使用Handler的解決方案?

+0

只是檢查出你的secound網址是否在你的run方法中調用或不? –

+2

你不能像wv.loadUrl(url)那樣說「PageLoaded」;您只請求wv加載該頁面。如果你想知道何時加載頁面,你必須像這樣實現你的WebViewClient的onPageFinished():wv.setWebViewClient(新的WebViewClient(){public void onPageFinished(WebView webview,String url){ Log.d(「 「WebViewActivity」,「onPageFinished()」+ url); Toast.makeText(WebViewActivity.this,「onPageFinished()\ n」+ url,Toast.LENGTH_SHORT).show(); WebViewActivity.this.setTitle(url); } }並使用int delay = 0;以 \t \t); – greenapps

+0

我知道「PageLoaded」不是正確的日誌記錄方式,因爲您建議只有在回調onPageFinished時才加載頁面。這只是檢查MyRunnable中的run()方法是否被調用。 – Angelo

回答

0

好的,解決了。其實,我發佈的代碼是可行的。問題出現在我想加載的頁面要求您通過Javascript彈出頁面離開頁面時。你有兩種方式來處理這個問題:

  1. 實例化WebChromeClient和處理彈出
  2. 創建單一的WebView實例並將其保存到內部類中。

因此,該解決方案(第二個)的作品,以及,即使更多的內存非常昂貴(可能):

public class MainActivity extends Activity { 

    @SuppressLint("SetJavaScriptEnabled") 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     String[] urlArr = {"http://www.google.com", "http://www.cnn.com", "http://www.wired.com"}; 
     int delay = 30 * 1000; 
     Handler handler = new Handler(); 
     for(int i = 0; i < urlArr.length; i++) { 
      WebView wv = new WebView(this); 
      wv.setWebViewClient(new WebViewClient()); 
      wv.getSettings().setJavaScriptEnabled(true); 
      MyRunnable runnable = new MyRunnable(urlArr[i], wv); 
      handler.postDelayed(runnable, delay); 
      delay = delay + 30 * 1000; 
     } 
    } 

    private class MyRunnable implements Runnable { 

     private String url; 
     private WebView wv; 

     public MyRunnable(String url, WebView wv) { 
      this.url = url; 
      this.wv = wv; 
     } 

     public void run() { 
      setContentView(wv); 
      wv.loadUrl(url); 
      Log.d("MainActivity", "PageLoaded: " + url); 
     } 
    } 
} 

希望這可以幫助別人,謝謝你的好意!