通过查看此处的其他帖子,我已经能够让我的 WebView 响应滑动 - 但存在一些问题。我想要完成的是让从右到左的滑动 Action 就像我 Activity 中的后退按钮一样。这意味着有时调用 webview.goBack 或 LoadURL 转到上一页,或者如果我在顶部网页调用 super.onBackPressed 关闭当前 webview。
后一种情况完美运行,但浏览器控件仅部分运行。如果我打开 webview 并深入两页,然后向后滑动一次,我看不到任何变化。如果我再次向后滑动, WebView 将关闭。这意味着之前的网页在第一次向后滑动时加载,但由于某种原因没有显示在屏幕上。如果我使用设备的后退按钮(调用与我的 onFling 完全相同的函数),显示会按预期刷新。有谁知道可能导致这种行为的原因是什么?它与覆盖某处 Action 的 webview 运动事件有关吗?
相关代码如下。感谢您查看。
公共(public)类 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();
}
}
最佳答案
我遇到了同样的问题。尝试:
public void onCreate(Bundle savedInstanceState) {
...
gestureDetector = new GestureDetector(gestureListener);
wv.setOnTouchListener(
new View.OnTouchListener() {
public boolean onTouch(View wv, MotionEvent event) {
gestureDetector.onTouchEvent(event);
return false;
}
}
);
所以返回总是 false,尽管检测器返回 true。我知道这不是应该的方式,但它对我有用。
关于android - 从 WebView 中的 onFling 调用时 LoadURL/goBack 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5345645/