android webview 客户端活动指示器

Posted

技术标签:

【中文标题】android webview 客户端活动指示器【英文标题】:android webview client activity indicator 【发布时间】:2012-03-07 19:43:26 【问题描述】:

我得到了在 web 视图中显示活动指示器的代码。我检查了不止一个参考,但我仍然无法让它工作。您能帮我调试一下下面的代码吗?

活动指示器没有附带以下代码

protected void onCreate(Bundle savedInstanceState) 
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    this.getWindow().requestFeature(Window.FEATURE_PROGRESS);
    final BaseActivity MyActivity = ReviewWebActivity.this;
    setContentView(R.layout.review_web);
    getWindow().setFeatureInt(Window.FEATURE_PROGRESS,
            Window.PROGRESS_VISIBILITY_ON);


    ScannedProduct product =  getReviewUrl();
    reviewUrl = product.getReviewLink();

    if (reviewUrl == null) 
        String err = product.getErrorCode();
        if(err.equals("")) err ="No Data Available for this product";
        Toast.makeText(getApplicationContext(),
                "No Data Available for this product", 1).show();
        return;
    

    webReview = (WebView) findViewById(R.id.webReview);
    webReview.setWebChromeClient(new WebChromeClient() 
        public void onProgressChanged(WebView view, int progress) 
            // Make the bar disappear after URL is loaded, and changes
            // string to Loading...
            MyActivity.setTitle("Loading...");
            MyActivity.setProgress(progress * 1000); // tried with 100 also


        
    );
    webReview.setWebViewClient(new ReviewWebClient());
    webReview.getSettings().setjavascriptEnabled(true);

    webReview.loadUrl(reviewUrl);

【问题讨论】:

【参考方案1】:
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class SandbarinFacebook extends Activity 
    WebView mWebView;

    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        final ProgressDialog pd = ProgressDialog.show(this, "", "Loading...",true);

        mWebView = (WebView) findViewById(R.id.webkitWebView1);
        mWebView.getSettings().setJavaScriptEnabled(true);
        mWebView.getSettings().setSupportZoom(true);  
        mWebView.getSettings().setBuiltInZoomControls(true);
        mWebView.setWebViewClient(new WebViewClient() 
            @Override
            public void onPageFinished(WebView view, String url) 
                if(pd!=null && pd.isShowing())
                
                    pd.dismiss();
                
            
        );
        mWebView.loadUrl("http://www.yahoo.co.in");
        setTitle("Yahoo!");
    

【讨论】:

【参考方案2】:

在 Activity 的onCreate 方法中编写以下代码。

webView.setWebChromeClient(new ChromeClient());
progress=ProgressDialog.show(this, "", "Loading...");
webView.loadUrl(url);

在同一活动中创建ChromeClient 类。

 private class ChromeClient extends WebChromeClient 
    @Override
    public void onProgressChanged(WebView view, int newProgress) 
        if(newProgress >= 85) 
            progress.dismiss();
        
        super.onProgressChanged(view, newProgress);
    

相应地声明对象。如果您仍然面临错误,请回复我。我会提供完整的源代码。

【讨论】:

ChromeClient 类中没有进度对象【参考方案3】:

我无法发表评论,因为我没有足够的声望点,只能对已接受的答案快速发表评论:在检查对话框是否显示之前检查 null。这将避免可怕的 NPE。

if(pd != null && pd.isShowing())  ... 

【讨论】:

【参考方案4】:

科特林片段:

myProgressBar.show()

myWebView.webViewClient = object : WebViewClient() 
    override fun onPageFinished(view: WebView, url: String) 
        myProgressBar.hide()
    

将此扩展功能添加到您的扩展文件中:

fun View.show() 
    visibility = View.VISIBLE


fun View.hide() 
    visibility = View.GONE

【讨论】:

以上是关于android webview 客户端活动指示器的主要内容,如果未能解决你的问题,请参考以下文章

在 swift 4 中使用 webkit 在 webView 中导航时创建活动指示器

Android 访问 webview 历史记录

带有自定义图像的活动指示器

懂球帝Android客户端WebView优化之路

Android活动指示器?

Android WebChrome 客户端 Promts/Opens Link 在浏览器而不是 WebView