我有一个使用pageStart()
的Android应用。我展示了我的整个网站。我的问题是,当我点击导航上的按钮加载页面时,有时他们会通过第一次触摸打开,有时无效。我必须触摸按钮2次,3次或更多次才会打开。
这也适用于网站中的网址。这真是奇怪的行为,我不知道原因。
通过使用pageFinish()
和页面完成,我看到它开始但是当进度百分比为10 webView = (WebView) findViewById(R.id.webview1);
webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setLoadWithOverviewMode(true);
webSettings.setAllowFileAccess(true);
if (Build.VERSION.SDK_INT >= 19) {
webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
} else if (Build.VERSION.SDK_INT >= 11 && Build.VERSION.SDK_INT < 19) {
webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
if (id == R.id.searchAds) {
startWebView("http://www.test.com/");
} else if (id == R.id.myPage) {
startWebView("http://www.test.com/profile");
} else if (id == R.id.allNewPosts) {
startWebView("http://www.test.com/");
} else if (id == R.id.followingsNewPosts) {
startWebView("http://www.test.com/new/");
} else if (id == R.id.followingsNewPosts) {
startWebView("http://www.test.com/categories/");
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
private void startWebView(String myURL) {
if (!isNetworkStatusAvialable(getApplicationContext())) {
Toast.makeText(getApplicationContext(),"No internet access" ,Toast.LENGTH_LONG).show();
} else {
webView.setWebViewClient(new Client());
webView.setWebChromeClient(new ChromeClient());
webView.loadUrl(myURL);
}
}
public class Client extends WebViewClient {
ProgressDialog progressDialog;
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
}
//If you will not use this method url links are open in new brower not in webview
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (!url.contains("test.com")) {
view.getContext().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
return true;
} else {
view.loadUrl(url);
return true;
}
}
//Show loader on url load
public void onLoadResource(WebView view, String url) {
// Then show progress Dialog
if (progressDialog == null && url.contains("test.com")) {
// in standard case YourActivity.this
progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setMessage("loading ...");
progressDialog.show();
}
}
// Called when all page resources loaded
public void onPageFinished(WebView view, String url) {
try {
// Close progressDialog
if (progressDialog.isShowing()) {
progressDialog.dismiss();
progressDialog = null;
progressRunning = false;
}
} catch (Exception exception) {
exception.printStackTrace();
}
}
时表示它已停止加载!
问题在Android工作室模拟器中不存在于真实手机中。 (并存在于不同的手机和Android版本中)
如果需要,这是我的代码的一部分。
{{1}}
答案 0 :(得分:1)
我知道我参加聚会完全迟到了,但我遇到了同样的问题,我设法为遇到问题的人找到了解决方法。我的经验是,大约 10 次中的 7-8 次,webView 会正确加载,但有时它不会没有特别的原因,至少我的理解是。
我仍然不知道这是什么原因,但是因为这种行为只涉及 10% 的进度(经过无数次运行,我从来没有在 10% 之前或之后卡住过)和大多数调用成功后,当进度为 10% 时,我会启动一个 postDelayed Runnable,它将在一段时间后运行。如果经过这段时间后进度仍为 10%,我只需重新加载 URL。由于大多数调用都是成功的,因此即使连续失败,用户也可能只会遇到几秒钟的延迟,但肯定会加载 url。就个人而言,它从来没有让我失望过。
注意: onLoadResource
在 extends WebViewClient
警告:我使用这个逻辑来加载一些文档和静态页面。如果您希望您的网络视图前进、后退等。我建议还根据您的 API 实施 shouldOverrideUrlLoading(WebView view, String url)
或 shouldOverrideUrlLoading(WebView view, WebResourceRequest request)
,并相应地更改 view.loadUrl(yourURL)
中的网址!
希望对大家有所帮助!
private int _progress = 0;
@Override
public void onLoadResource(final WebView view, String url) {
super.onLoadResource(view, url);
_progress = view.getProgress();
if (_progress == 10){
Toast.makeText(ctx, ""+view.getProgress(), Toast.LENGTH_SHORT).show();
view.postDelayed(new Runnable() {
@Override
public void run() {
if(_progress == 10){
Toast.makeText(ctx, "RELOADING", Toast.LENGTH_SHORT).show();
view.loadUrl(yourURL);
}
}
}, 1500);
}
if(view.getProgress() == 100) {
//URL LOADED
progressBar.setVisibility(View.GONE);
view.setVisibility(View.VISIBLE);
}
}
答案 1 :(得分:0)
我有类似的问题,我发布了webView渲染后延迟了url加载。
webView.postDelayed(new Runnable() {
@Override
public void run() {
fetchData();
}
}, 500);