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()和goForward()调用。

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

什么是不明显的,当我们应该调用canGoBack()和canGoForward()和启用/禁用这些按钮。应该在:

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

canGoBack()的文档当前为state,它返回true如果

this WebView has a back history item

canGoForward()有一个类似的Javadoc。

问题是当背面的历史已经改变的时候,这并不清楚。它将完全依赖于WebView(Client)的实现,并且将来可能会永远改变。在各种Android设备/版本/分支上甚至可能会有所不同。

doUpdateVisitedHistory()也没有清楚记录:

Notify the host application to update its visited links database.

问题是它不会在被调用时声明,只有您需要更新您的访问链接。根据WebView(Client)的实现,它可以比您想要的更早或更晚地被调用。

我认为您的选择是确定您希望如何安全地使您的代码免受可能的故障。

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

http://stackoverflow.com/questions/31247798/what-is-the-recommended-event-for-updating-webview-navigation-ui

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:android – 更新WebView导航界面的推荐事件是什么?