【问题标题】:Android WebView: EditText that displays URL doesn't refresh after goBack or goForwardAndroid WebView:显示URL的EditText在goBack或goForward后不刷新
【发布时间】:2014-09-02 08:20:26
【问题描述】:

所以我有一个 WebView,并且有一个 EditText,用户可以输入一个 URL,然后按 Go 按钮导航到该 URL。还有一个后退按钮和前进按钮,它们似乎工作正常(只需调用 goBack() 和 goForward() )。

现在,问题是在按下后退或前进按钮时刷新 EditText 以显示正确的 URL。有时它似乎工作正常,但更多时候它会落后于点击 1 个网页。我的意思是,如果我在网页上(称为 WP2)并单击返回,显示的网页将正确返回上一个(WP1),但 URL 最初在 editText(WP2)中保持不变)。如果我再次单击返回,网页将再次返回正常(WP0),但现在 editText 显示之前显示的网页(WP1)的 URL。

我希望我的问题足够清楚,如果有人有任何建议,我将不胜感激。谢谢!

编辑:我可能应该发布一些代码,所以这里是:

我的返回按钮 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());
            }
        });

【问题讨论】:

    标签: android webview


    【解决方案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);
        }
    
        ....
    
    }
    

    【讨论】:

    • 这似乎是真的。我将尝试修复代码,如果我可以让它工作将标记为正确(不能投票,因为我的帐户分数太低抱歉)。感谢您的建议!
    • 太棒了!我想我第一次尝试它时,我把它放在 setWebChromeClient 下,然后它不起作用。但现在完美! :D 非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2020-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-19
    • 2013-10-24
    相关资源
    最近更新 更多