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()
могут использоваться для включения или отключения кнопок, элементов панели действий или чего-то еще. Это даст вам типичный пользовательский интерфейс браузера, где кнопки "Назад" и "Вперед" доступны только пользователю, если они будут иметь реальный эффект.
Что не очевидно, когда мы должны звонить canGoBack()
и canGoForward()
и включать/отключать эти кнопки. Должно ли быть:
-
onPageStarted()
в пользовательскомWebViewClient
? -
doUpdateVisitedHistory()
в пользовательскомWebViewClient
? - в каком-то другом обратном вызове?
- какая-то комбинация из них?
- каждую секунду или так чисто по таймеру, потому что у нас нет надежного обратного вызова для определения того, когда они должны обновляться?