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 客户端活动指示器的主要内容,如果未能解决你的问题,请参考以下文章