android - 从 WebView 中的 onFling 调用时 LoadURL/goBack 不工作

标签 android webview onfling

通过查看此处的其他帖子,我已经能够让我的 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/

相关文章:

android - 无法在android studio的主 Activity java文件中编写代码

android - 需要在android中使用GPS跟踪位置

android - 使用 9-patch 图像会节省大量内存吗?

android - 统一,通过 WebView 获取youtube网址,然后统一播放视频

android SimpleOnGestureListener 只触发onscroll事件

android - getMenuInflater().inflate(R.menu.main, menu);main无法解析或者不是字段,

ios - 如何在 Swift iOS 应用程序中提供单页应用程序服务?

Android:Webview 性能

android - 带手势检测器的 ImageSwitcher "fling"/"swipe"

android - onFling 和 SimpleOnGestureListener 的问题