Как использовать кнопку "Назад", чтобы вернуться с помощью XWalkView на CrossWalk или отключить его?

Я использую ниже код, чтобы сначала вернуться в 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. Но я не могу найти пример, чтобы использовать его. Когда я не реализую back back envent, приложение выйдет после двойного нажатия кнопки "Назад".

Мой вопрос: 1. Как использовать вернуться в XWalkView, если какой-то код может быть более полезным. 2. Как я могу отключить событие нажатия кнопки "Назад", когда я не использую функцию "назад".

Спасибо заранее.

Ответ 1

После нескольких дней рытья я решил это: поместите это в действие xwalkview. Хотя это работает, но возвращение назад иногда теряло некоторую историю. Поэтому я также хочу, чтобы кто-то дал лучший ответ здесь.

для goback:

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);
}

для отключения заднего события вы можете переопределить любой из этих методов dispatchKeyEvent, onBackPressed, onKeyDown. Подробнее см. этот ответ.

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

Ответ 2

Вы можете использовать xwalkviewhistory.cangoback()