【问题标题】:Pressing back button exits the app instead of navigating backwards in the WebView按后退按钮退出应用程序,而不是在 WebView 中向后导航
【发布时间】:2013-06-05 13:58:07
【问题描述】:

我正在开发一个 WebView android 应用程序。我无法修复我的应用程序中的问题以进行反向导航。我正在使用此代码,并尝试对此进行所有修改。

public class DeviceActivity extends Activity {
    private WebView web;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_layout);

        web = (WebView) findViewById(R.id.webView);
        web.getSettings().setJavaScriptEnabled(true);
        web.getSettings().setJavaScriptCanOpenWindowsAutomatically(false);
        web.getSettings().setPluginsEnabled(false);
        web.getSettings().setSupportMultipleWindows(false);
        web.getSettings().setSupportZoom(false);
        web.setVerticalScrollBarEnabled(false);
        web.setHorizontalScrollBarEnabled(false);

        // Our application's main page will be loaded
        web.loadUrl("file:///android_asset/fbp/index.html");

        web.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                return false;
            }

            public void onBackPressed() {
                if (web.canGoBack()) {
                    web.goBack();
                } else {
                    // My exit alert code goes here.
                }
            }
        });
    }
}

这不会返回,而是退出应用程序。 任何帮助将不胜感激。

【问题讨论】:

    标签: android webview


    【解决方案1】:

    将此添加到您的 Activity 代码中(不在 onCreate() 中或嵌套在其他任何地方)

    @Override
    public void onBackPressed() {
        if (web.copyBackForwardList().getCurrentIndex() > 0) {
            web.goBack();
        }
        else {
            // Your exit alert code, or alternatively line below to finish
            super.onBackPressed(); // finishes activity
        }
    }
    

    这将在WebView历史堆栈中导航,直到它为空,然后执行默认操作(在这种情况下,它完成了活动)。

    您可能还应该将 WebViewClient 设置为让shouldOverrideUrlLoading 返回true,否则您将不会加载任何链接。

    【讨论】:

    • 我在插入退出对话代码时遇到问题,可以帮我在这里进行退出对话吗?
    • 当然 - 针对您的具体问题打开一个新问题,您尝试了什么,哪里出了问题,如果可以的话,我会提供帮助。 :)
    【解决方案2】:

    我们可以使用 webview 方法来向前和向后导航。方法 boolean canGoForward() 用于获取此 WebView 是否具有转发历史记录项。 canGoBack() 获取此 WebView 是否有返回历史记录项。 goBack() 回到这个 WebView 的历史,goForward() 向前推进这个 WebView 的历史。这是我的实现:

    @Override
        public void onClick(View v) {
            switch (v.getId()){
                case R.id.forward_btn:
                    if (mWebView.canGoForward()){
                        mWebView.goForward();
                    }else{
                        Toast.makeText(getApplicationContext(), "Tidak ada halaman lagi!", Toast.LENGTH_SHORT).show();
                    }
                    break;
                case R.id.backward_btn:
                    if (mWebView.canGoBack()){
                        mWebView.goBack();
                    }else{
                        Toast.makeText(getApplicationContext(), "Tidak bisa kembali!", Toast.LENGTH_SHORT).show();
                    }
                    break;
                case R.id.reload_btn:
                    layoutLoading.setVisibility(View.VISIBLE);
                    mWebView.reload();
                    break;
                case R.id.back_btn:
                    onBackPressed();
                    break;
            }
        }
    

    【讨论】:

      【解决方案3】:

      在您的代码中,您在 onCreate() 方法中保留了以下块。

      if (web.canGoBack()) {
              web.goBack();       
      }
      else {
          //My exit alert code goes here.    
      
      }
      

      而是像这样在 onBackPressed() 中保留相同的代码

      @Override
      public void onBackPressed() {
          if(web.canGoBack()) {
              web.goBack();
          } else {
              super.onBackPressed();
          }
      }
      

      也可以参考Getting Started: WebView-based Applications for Web Developers in Android

      【讨论】:

        猜你喜欢
        • 2014-06-04
        • 1970-01-01
        • 1970-01-01
        • 2020-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多