所以我有一个WebView,并且有一个EditText,用户可以在URL中输入,然后按Go按钮导航到该URL。还有一个后退按钮和前进按钮似乎工作正常(只需调用goBack()和goForward())。
现在,问题是刷新EditText以在按下后退或前进按钮的任何时候显示正确的URL。有时似乎工作正常,但更常见的是它会落后于1个网页的点击。我的意思是,如果我在网页上(称之为WP2)并单击返回,则显示的网页将正确返回到上一个网页(WP1),但URL最初将在editText中保持不变(WP2) )。如果我再次点击回来,网页将再次返回(WP0),但现在editText显示以前显示的网页(WP1)的URL。
我希望我的问题很清楚,如果有人有任何建议我会非常感激。谢谢!
编辑:我应该发布一些代码,所以这里是:我的goBack按钮OnClick:
leftWebViewBackBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
WebView webView = webViewFrag.web; //this is getting the webview from its fragment.
webView.goBack();
urlEditText.setText(webView.getUrl());
}
});
答案 0 :(得分:1)
阅读getUrl()的文档说明
获取当前页面的URL。这并不总是与传递给WebViewClient.onPageStarted的URL相同,因为虽然该URL的加载已经开始,但当前页面可能没有更改。
您最好的选择是覆盖WebViewClient#onPageStarted()
并使用setWebViewClient(...)
。您也可能会进入此处提到的某个重定向循环(WebView back history without redirects),因此您可能需要考虑这一点(除非您知道您不会遇到它们)。
代码可能如下所示:
webView.setWebViewClient(new WebViewClient() {
....
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
urlEditText.setText(url);
}
....
}