更新WebView导航UI的推荐事件是什么?

时间:2015-07-06 13:58:03

标签: android android-webview

WebView提供了goBack()goForward()来实现典型的后退按钮行为,可以绑定到按钮,操作栏项或其他任何内容:

  @Override
  public boolean onOptionsItemSelected(MenuItem item) {
    switch(item.getItemId()) {
      case R.id.back:
        if (webView.canGoBack()) {
          webView.goBack();
        }
        break;

      case R.id.fwd:
        if (webView.canGoForward()) {
          webView.goForward();
        }
        break;

      case R.id.reload:
        webView.reload();
        break;

      default:
        return(super.onOptionsItemSelected(item));
    }

    return(true);
  }

WebView还有canGoBack()canGoForward(),根据WebView中的当前导航历史记录,告诉您这些是否可行,上面显示为围绕goBack()的警卫{1}}和goForward()来电。

理论上,canGoBack()canGoForward()可用于启用或禁用按钮,操作栏项等。这将为您提供典型的浏览器UI,其中后退和前进按钮仅在用户具有实际效果时可用。

时我们应该调用canGoBack()canGoForward()并启用/禁用这些按钮,这是不明显的。应该是:

    自定义onPageStarted()?中的
  • WebViewClient 自定义doUpdateVisitedHistory()
  • 中的
  • WebViewClient
  • 在其他一些回调中?
  • 这些的一些组合?
  • 纯粹在计时器上每隔一秒左右,因为我们没有可靠的回调来确定何时应该更新?

1 个答案:

答案 0 :(得分:7)

canGoBack()当前state的文档,如果

,则返回true
  

此WebView具有后退历史记录项

canGoForward()有一个类似的Javadoc。

问题是,当后面的历史记录发生变化时,没有明确记录。它完全取决于WebView(客户端)的实现,并且将来可能总是会发生变化。在各种Android设备/版本/叉子上甚至可能会有所不同

doUpdateVisitedHistory()也没有明确记录:

  

通知主机应用程序更新其访问过的链接数据库。

问题是它没有说明何时被调用,只是你需要更新你访问过的链接。根据WebView(客户端)实现,它可以比您想要的更早或更晚调用

我认为您可以选择自己来确定您的代码对可能的失败的安全程度。

就个人而言,我会在onPageStarted()onPageFinished()doUpdateVisitedHistory()进行更新,因为它适用于所有合理预期的条件,并且没有使用计时器进行轮询的性能开销。
然后我会在几个品牌和Android版本的设备上测试它,看它是否像我期望的那样。
如果它仍然不起作用,可以考虑实现定时器/轮询机制。