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

Com*_*are 18 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);
  }
Run Code Online (Sandbox Code Playgroud)

WebView也有canGoBack()canGoForward(),告诉你,如果这些是给在当前的导航历史可行的方案WebView,如上文所示周围的卫兵goBack()goForward()电话.

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

什么是不明显的时候,我们应该呼吁canGoBack()canGoForward()和启用/禁用这些按钮.应该是:

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

Ken*_*ndt 7

canGoBack()目前的文档声明如果返回true则返回true

此WebView具有后退历史记录项

canGoForward() 有一个类似的Javadoc.

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

doUpdateVisitedHistory() 也没有明确记录:

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

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

我认为您可以选择确定您的代码对可能的失败的安全性.

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