今天,在Fragment里面加入了一个WebView,想让webView在点击了一个链接之后,我按返回键是回到webview的上一个页面,而不是将整个webview回退。开始,想在activity里面处理keyDown事件,但是在activity里面获得webview的引用,就破坏了程序封装性,更准确的说是违反了狄米特法则。
思路出现很大的错误,只要是view就可以,自己捕获点击事件或者按键事件。所以,webview也不例外,这样自己可以覆写onKeyDown事件,或者添加监听器。
mWebView.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (KeyEvent.ACTION_DOWN == event.getAction()) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack())
{
// 返回键退回
mWebView.goBack();
return true;
}
// If it wasn't the Back key or there's no web page history, bubble up
// to the default
// system behavior (probably exit the activity)
return false;
}
return false;
}
});