【问题标题】:Backpress in WebView does not workWebView 中的 Backpress 不起作用
【发布时间】:2017-12-28 10:26:13
【问题描述】:

我有一个应用程序,一个 Activity,点击按钮布局后,Activity 的布局会随着片段布局发生变化,在布局中我只有 WEBVIEW。然后加载 url 页面都是可点击的,但是我点击后退按钮它进入活动,而不是前一页。这是为什么呢?

 myWebView.setOnKeyListener(new View.OnKeyListener(){

        public boolean onKey(View v, int keyCode, KeyEvent event) {

            if (keyCode == KeyEvent.KEYCODE_BACK
                    && event.getAction() == MotionEvent.ACTION_UP) {
                Log.d(Constants.TAG_FRAGMENT,"ACTION_UP");
                if(myWebView.canGoBack())
                Log.d(Constants.TAG_FRAGMENT,"goBack");
                myWebView.goBack();
                return true;
            }
            return false;
        }
    });

为什么 CanGoBack 不起作用?仅在日志中显示“ACTION_UP”。

【问题讨论】:

  • 尝试使用接口进行onclick,并在activity中使用该接口方法回调按钮。在 onBackPressed 中,检查 canGoBack
  • @MohdAsifAhmed 我试过但是 (myWebView.canGoBack()) didint 工作
  • 在 Stack Overflow 上的写作请多加注意。喋喋不休的标题、俚语、txtspk 和 please-halp 乞求所有这些都需要志愿者编辑的额外工作。在这里发帖时使用英语拼写检查器并避免聊天式对话会很有帮助。
  • 可能是webview再也回不去了
  • 尝试添加日志 Log.d(TAG,"canGoBack value " + myWebView.canGoBack());将其粘贴到 onKeyDown 并检查你得到了什么价值

标签: android android-fragments webview


【解决方案1】:

因为你没有在if condition 中使用"{ }" 大括号

  if (keyCode == KeyEvent.KEYCODE_BACK
         && event.getAction() == MotionEvent.ACTION_UP) {

         Log.d(Constants.TAG_FRAGMENT,"ACTION_UP");

         if(myWebView.canGoBack()){
              Log.d(Constants.TAG_FRAGMENT,"goBack");
              myWebView.goBack();
         }

         return true;
    }

【讨论】:

  • 我做到了,但没有帮助
【解决方案2】:

您可以使用Activity's OnKeyDown 函数,而不是将KeyListener 分配给WebView

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        Log.d(Constants.TAG_FRAGMENT,"ACTION_UP");
           if(myWebView.canGoBack()){
                Log.d(Constants.TAG_FRAGMENT,"goBack");
                myWebView.goBack();
                return true;
            } else {
                return super.onKeyDown(keyCode, event);
            }
        } else {
            return super.onKeyDown(keyCode, event);
        }
    }

编辑:

来自Docs

canGoBack 当且仅当此 WebView 有回溯历史时才返回 true 项目

因此,请确保您有适当的回溯历史记录,以便 webview 重定向。

【讨论】:

  • 又是同样的问题
  • 如果 canGoBack() 返回 false,那么您可能在 webview 中没有任何返回历史记录。当您在同一 web 视图中从一个页面重定向到另一个页面时,会生成背景历史。
  • 这是否意味着如果相同的url但不同的选项卡将不起作用?
  • 我该怎么办?
  • 不同的选项卡意味着正在启动不同的 webview 对象,因此两者都没有以任何方式连接(就像您电脑中的普通浏览器选项卡一样);如果你想让用户返回,你必须让他们只使用一个 webview 重定向。仅当用户使用特定网页上可用的hyperlinks 重定向时才会生成返回历史记录。
猜你喜欢
  • 2020-11-03
  • 2020-01-03
  • 1970-01-01
  • 2017-08-16
  • 2012-10-15
  • 2013-01-07
  • 1970-01-01
  • 2012-05-18
  • 2019-03-14
相关资源
最近更新 更多