2012-03-21 38 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