2012-03-21 80 views
0

編輯: 我正在使用ProgressBar的Webview,工作正常。現在我想刷新我的Webview,這也適用。當我試圖將它們合併時,Spinner並不會結束。這是我的代碼:progressBar和刷新webview組合android

private final Runnable m_Runnable = new Runnable() 
    { 
     public void run() 

     { 
      //Toast.makeText(WebcamsScreen.this,"in runnable",Toast.LENGTH_SHORT).show(); 
      doRefreshingStuff(id); 
      WebcamsScreen.this.mHandler.postDelayed(m_Runnable, 20000);    
     } 

    }; 



    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
      //initialitions 

     doRefreshingStuff(id); 
     this.mHandler = new Handler(); 

     this.mHandler.postDelayed(m_Runnable,20000); 

     doRefreshingStuff(id); 
    } 
public void doRefreshingStuff(String id){ 

       setContentView(R.layout.web4); 

       webView7 = (WebView) findViewById(R.id.web_4_1); 

       webView7.getSettings().setJavaScriptEnabled(true); 
       webView7.getSettings().setJavaScriptEnabled(true); 
       progressBar = ProgressDialog.show(WebcamsScreen.this, "example", "..."); 
       url="my url"; 
webView7.setWebViewClient(new WebViewClient() { 
       public boolean shouldOverrideUrlLoading(WebView view, String url1) {    
        view.loadUrl(url1); 
        return true; 
       } 


       public void onPageFinished(WebView view, String url1) { 
        if (progressBar.isShowing()) { 
         progressBar.dismiss(); 
        } 
       } 
      }); 
       webView7.loadUrl(url); 

我必須改變什麼?

+0

爲什麼你想打電話一遍又一遍地創作? – MByD 2012-03-21 20:13:50

+1

你並不想自己運行'onCreate'。你究竟在努力完成什麼? – 2012-03-21 20:13:50

+0

我已經爲webview設置了一個progressBar。並與上面的代碼不起作用。我將在一分鐘內編輯我的帖子。 – 2012-03-21 20:21:46

回答

1

它看起來像你每20秒刷新一次WebView,並彈出一個新的進度對話框。您的代碼假定舊的進度對話框已被解除。如果沒有,那麼進度對話框就會變成孤兒,並且會一直顯示出來。您可以通過插入以下代碼來解決此問題:

if (progressBar != null && progressBar.isShowing()) { 
    progressBar.dismiss(); 
} 

就在行progressBar = ...之前。

但我不會這樣修復你的代碼。你正在做大量你不需要做的工作。 (例如,你不需要重新加載相同的內容視圖。)這是我的修訂版:

private final Runnable m_Runnable = new Runnable() { 
    public void run() { 
     doRefreshingStuff(id); 
     mHandler.postDelayed(m_Runnable, 20000); 
    } 
}; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
     //initialitions 

    setContentView(R.layout.web4); 
    webView7 = (WebView) findViewById(R.id.web_4_1); 
    webView7.getSettings().setJavaScriptEnabled(true); 
    webView7.getSettings().setJavaScriptEnabled(true); 
    webView7.setWebViewClient(new WebViewClient() { 
     public void onPageStarted(WebView view, String url, Bitmap favicon) { 
      if (!mProgressBar.isShowing()) { 
       mProgressBar.show(); 
      } 
     } 
     public void onPageFinished(WebView view, String url1) { 
      if (mProgressBar.isShowing()) { 
       mProgressBar.dismiss(); 
      } 
     } 
    }); 

    mProgressBar = new ProgressDialog(this); 
    mProgressBar.setTitle("example"); 
    mProgressBar.setMessage("..."); 

    mHandler = new Handler(); 
} 

protected void onResume() { 
    super.onResume(); 
    mHandler.post(m_Runnable); 
} 

protected void onPause() { 
    super.onPause(); 
    mHandler.removeCallbacks(m_Runnable); 
} 

public void doRefreshingStuff(String id) { 
    url="my url"; 
    webView7.loadUrl(url); 
} 

請注意,我的頁面加載循環的起點移到onResume()並殺死循環中onPause()。你可能需要稍微不同的邏輯,但是當你的活動暫停或結束時,你肯定應該停止循環。

+0

謝謝,我會試試看。我得到這個錯誤:引起:android.app.SuperNotCalledException:活動沒有通過super.onResume()調用。如果你能幫助我,你將成爲我的英雄。 – 2012-03-21 23:18:39

+0

我還得到這個:java.lang.RuntimeException:無法恢復活動android.app.SuperNotCalledException:<...>活動沒有通過呼叫<...> super.onResume() – 2012-03-21 23:34:36

+0

@qwerty_gr - 對不起。我忽略了在'onPause()'和'onResume()'中調用'super'。我更新了代碼以顯示需要完成的工作。 – 2012-03-22 00:55:51