progressBar and refresh webview combination android

有些话、适合烂在心里 提交于 2020-02-07 04:57:25

问题


EDIT: I am using a ProgressBar for a Webview that works fine. Now I want to refresh my Webview, which also works. When I am trying to combine them, the Spinner doesn't end at all. This is my code:

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

what must I change?


回答1:


It looks like you are refreshing your WebView every 20 seconds and popping up a new progress dialog when you do. Your code assumes that the old progress dialog has already been dismissed. If it hasn't, then the progress dialog just became orphaned and will remain on display forever. You can probably fix this by inserting this code:

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

just before the line progressBar = ....

But I wouldn't fix your code that way. You are doing a huge amount of work that you don't need to do. (For instance, you don't need to reload the same content view.) Here's my revised version:

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

Note that I moved the starting of the page loading loop to onResume() and kill the looping in onPause(). You may want slightly different logic, but you should definitely stop looping somehow when your activity pauses or finishes.



来源:https://stackoverflow.com/questions/9812077/progressbar-and-refresh-webview-combination-android

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!