progressBar和刷新webview组合android

时间:2012-03-21 20:10:22

标签: android webview runnable

编辑: 我使用ProgressBar进行Webview工作正常。现在我想刷新我的Webview,它也有效。当我试图将它们组合在一起时,Spinner根本就没有结束。这是我的代码:

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

我必须改变什么?

1 个答案:

答案 0 :(得分: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()中的循环。您可能需要稍微不同的逻辑,但是当您的活动暂停或结束时,您应该以某种方式停止循环。