通过查看此处的其他帖子,我已经能够让我的 WebView 响应滑动 - 但存在一些问题。我想要完成的是从右向左滑动,就像我活动中的后退按钮一样。这意味着有时调用 webview.goBack 或 LoadURL 以转到上一页,或者如果我在顶部网页调用 super.onBackPressed 以关闭当前 webview。
后一种情况完美地工作,但浏览器控件只是部分工作。如果我打开 webview 并深入两页,然后向后滑动一次,我看不到任何变化。如果我再次向后滑动,webview 就会关闭。这意味着上一个网页在第一次向后滑动时加载,但由于某种原因它没有显示在屏幕上。如果我使用设备的后退按钮(它调用与我的 onFling 完全相同的函数),则显示会按预期刷新。有谁知道可能导致这种行为的原因是什么?它是否与覆盖某处动作的 webview 运动事件有关?
相关的代码如下。谢谢参观。
公共类 WebBrowser 扩展 Activity ... {
...
GestureDetector gestureDetector;
SimpleOnGestureListener gestureListener = new SimpleOnGestureListener() {
private static final int SWIPE_MIN_DISTANCE = 120;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
if (Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY && Math.abs(e2.getX() - e1.getX()) > SWIPE_MIN_DISTANCE) {
goBack();
return true;
}
return false;
}
};
public void onCreate(Bundle savedInstanceState) {
...
gestureDetector = new GestureDetector(gestureListener);
wv.setOnTouchListener(
new View.OnTouchListener() {
public boolean onTouch(View wv, MotionEvent event) {
if(gestureDetector.onTouchEvent(event)) return true;
return false;
}
}
);
private void goBack() {
if (backURL.equals("close")) {
super.onBackPressed();
} else if (!backURL.equals("")) {
wv.loadUrl(backURL);
} else if (wv.canGoBack()) {
wv.goBack();
} else {
super.onBackPressed();
}
}
}