gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 23:14:10 34 4
gpt4 key购买 nike

WebView 提供 goBack()goForward() 用于实现典型的后退按钮行为,可以绑定(bind)到按钮、操作栏元素,或任何东西:

  @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?
  • doUpdateVisitedHistory() 在自定义 WebViewClient 中?
  • 在其他回调中?
  • 这些的某种组合?
  • 每秒钟左右纯粹是一个计时器,因为我们没有可靠的回调来确定何时应该更新这些?

最佳答案

canGoBack() 的文档目前state如果

返回true

this WebView has a back history item

canGoForward() 有一个类似的 Javadoc。

问题在于,更改回溯历史时没有明确记录。这将完全取决于 WebView(Client) 的实现,这在未来总是会改变。它甚至可能在各种 Android 设备/版本/ fork 上有所不同。

doUpdateVisitedHistory() 也没有明确记录:

Notify the host application to update its visited links database.

问题是它没有说明何时调用它,只说明您需要更新您访问的链接。根据 WebView(Client) 的实现,它可能会比您希望的更早或更晚被调用。

我认为,您可以自行决定是否希望让您的代码免受可能的故障影响。

就个人而言,我会在 onPageStarted()onPageFinished()doUpdateVisitedHistory() 进行更新,因为它在所有合理预期的情况下都有效条件,并且没有使用计时器轮询的性能开销。
然后我会在多个品牌和 Android 版本的设备上对其进行测试,看看它的行为是否符合我的预期。
如果仍然无法正常工作,可以考虑实现一种计时器/轮询机制。

关于android - 更新 WebView 导航 UI 的推荐事件是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31247798/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com