【问题标题】:How to use back button to go back with XWalkView of CrossWalk, or disable it?CrossWalk的XWalkView如何使用返回按钮返回,或者禁用它?
【发布时间】:2016-12-05 06:53:37
【问题描述】:

我在第一次尝试时使用下面的代码返回 webview。但是由于渲染能力低,我用 XWalkView 代替了 WebView。

public boolean onKeyDown(int keyCode, KeyEvent event) {
    WebView mWebView = (WebView) findViewById(R.id.webview);
    if (event.getAction() == KeyEvent.ACTION_DOWN) {
        switch (keyCode) {
            case KeyEvent.KEYCODE_BACK:

                if (mWebView.canGoBack()) {
                    mWebView.goBack();
                } else {
                    finish();
                    if (MainActivity.mTencent.isSessionValid()) {
                        MainActivity.logout();
                    }
                }
                return true;
        }

    }
    return super.onKeyDown(keyCode, event);
}

当切换到XWalkView 时,我只发现this 关于回到XWalkView。但我找不到使用它的例子。 当我没有实现返回按钮事件时,双击返回按钮后应用程序将退出。

我的问题是: 1.如何在XWalkView中使用go back,如果一些代码可能会更有帮助。 2. 当我不使用返回功能时,如何禁用返回按钮点击事件。

提前谢谢你。

【问题讨论】:

标签: android back-button keyevent crosswalk xwalkview


【解决方案1】:

经过几天的挖掘,我解决了这个问题:把它放在活动 xwalkview 中。虽然这有效,但回去有时会丢失一些历史。所以我也希望有人在这里给出更好的答案。

返回:

public boolean onKeyDown(int keyCode, KeyEvent event) {
    //WebView mWebView = (WebView) findViewById(R.id.webview);
    XWalkView mXWalkView = (XWalkView) findViewById(R.id.xWalkView);
    if (event.getAction() == KeyEvent.ACTION_DOWN) {
        switch (keyCode) {
            case KeyEvent.KEYCODE_BACK:

                if (mXWalkView.getNavigationHistory().canGoBack()) {
                    mXWalkView.getNavigationHistory().navigate(XWalkNavigationHistory.Direction.BACKWARD, 1) ;
                } else {
                    finish();
                    if (MainActivity.mTencent.isSessionValid()) {
                        MainActivity.logout();
                    }
                }
                return true;
        }

    }
    return super.onKeyDown(keyCode, event);
}

对于禁用返回事件,您可以覆盖dispatchKeyEventonBackPressedonKeyDown 这些方法中的任何一个。更多信息请参考this answer

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
    // TODO Auto-generated method stub
    if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
        return true;
    }
    return super.dispatchKeyEvent(event);
}

【讨论】:

  • 这个解决方案比获得 50 赏金的解决方案要好得多。
【解决方案2】:

您可以使用xwalkviewhistory.cangoback()

【讨论】:

  • 是的,我知道这个,但我不知道如何从手册中使用它。您能提供更多信息吗?
  • 以及如何禁用它?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-12
  • 2013-07-26
  • 2020-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多