【问题标题】:Override back button while viewing webview (fragment)查看网页视图(片段)时覆盖后退按钮
【发布时间】:2014-10-29 18:04:57
【问题描述】:

我使用Fragment 创建了一个WebView;这是我的代码:

public class MyWebView extends Fragment {

    private WebView webView;

    @SuppressLint("SetJavaScriptEnabled")
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        Bundle args = getArguments();
        String url = args.getString("url");
        webView = (WebView) getView().findViewById(R.id.webView);

        webView.setWebViewClient(new MyBrowser());

        WebSettings webSettings = webView.getSettings();
        webSettings.setSaveFormData(true);
        webSettings.setUseWideViewPort(true);
        webSettings.setLoadWithOverviewMode(true);
        webSettings.setSupportZoom(true);
        webSettings.setBuiltInZoomControls(true);

        webSettings.setLoadsImagesAutomatically(true);
        webSettings.setJavaScriptEnabled(true);
        webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
        webView.loadUrl(url);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.web_view, container, false);

        view.setOnKeyListener(new OnKeyListener() {
              @Override
              public boolean onKey( View v, int keyCode, KeyEvent event ) {
                  if (keyCode == KeyEvent.KEYCODE_BACK) {
                      if (webView.canGoBack()) {
                          webView.goBack();
                          return true;
                      }
                  }
                  return false;
              }
         });

        return view;        
    }

    private class MyBrowser extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
           view.loadUrl(url);
           return true;
        }
    }
}

我试图覆盖onBackPressed(),但它似乎不适用于Fragment。所以我使用了setOnKeyListener(),但它不起作用。 你能告诉我为什么返回按钮会关闭应用程序而不是返回上一个网页吗?

【问题讨论】:

  • 我想你可以在这里找到更多信息...stackoverflow.com/questions/6077141/…
  • @PaytoN 该网址指的是使用活动而不是片段
  • 后退按钮将您带出您打开的当前屏幕,在网页视图的情况下,无论您在网页视图中的哪个页面上,对于移动设备它只是一个屏幕,(片段或活动)所以当按下它会清除当前屏幕并返回,不管你在哪个网页链接..

标签: android webview fragment back-button onbackpressed


【解决方案1】:

Fragment 没有收到OnBackPressed 事件的回调。当您的片段显示并在活动和片段之间来回通信时,您必须让您的Activity 状态感知。

例如,您可以将您在键上调用的代码设为公共布尔函数,如果片段存在,您将与它进行交互,您将继续以类似的方式返回 true 或 false,这样您就可以知道如果没有更多页面可以返回,您应该自然地继续进行活动。

【讨论】:

    猜你喜欢
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多