将后退按钮处理为 WebNavigator

Handling Back Button to be WebNavigator

我在一个应用程序中工作,我创建了一个 WebView,它显示我的 Web 视图位于片段中的网站。但是,我在处理后退按钮时遇到问题,它会关闭应用程序。我尝试按以下方式处理后退按钮:

        rootView.setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View arg0, int arg1, KeyEvent arg2) {
            // TODO Auto-generated method stub
            if (arg1 == KeyEvent.KEYCODE_BACK && myWebView.canGoBack()) {
                myWebView.goBack();
                return true;
            }
            return false;
        }
    });

这是里面

 onCreateView

没用。如果没有要返回的页面,我该如何处理返回按钮返回到上一个返回。它会关闭应用程序。

这是我的片段代码:

public class NewsFragment extends Fragment {


private ProgressDialog progressDialog;
private WebView myWebView ;

public NewsFragment() {
    // Required empty public constructor
}


    // Otherwise defer to system default behavior.




@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View rootView = inflater.inflate(R.layout.fragment_news, container, false);

    myWebView = (WebView) rootView.findViewById(R.id.mwl_Website);
    myWebView.setWebViewClient(new WebViewClient());
    myWebView.getSettings().setBuiltInZoomControls(true);
    myWebView.requestFocusFromTouch();
    myWebView.setVerticalScrollBarEnabled(true);
    myWebView.setHorizontalScrollBarEnabled(true);
    myWebView.setVerticalScrollBarEnabled(true);
    myWebView.setHorizontalScrollBarEnabled(true);
    myWebView.requestFocusFromTouch();
    myWebView.getSettings().setJavaScriptEnabled(true);
    myWebView.getSettings().setUseWideViewPort(true);
    myWebView.getSettings().setLoadWithOverviewMode(true);

    myWebView.addJavascriptInterface(new WebAppInterface(getActivity()), "Android");

    myWebView.getSettings().setJavaScriptEnabled(true);
    myWebView.loadUrl("http://en.themwl.org/");


    new LoadViewTask().execute();

    rootView.setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View arg0, int arg1, KeyEvent arg2) {
            // TODO Auto-generated method stub
            if (arg1 == KeyEvent.KEYCODE_BACK && myWebView.canGoBack()) {
                myWebView.goBack();
                return true;
            }
            return false;
        }
    });


    return rootView;

}

这是我的 logcat

           07-29 08:37:49.614  18765-18765/com.mw.alahdal.amjad.mwlcopytwo E/WindowManager﹕ android.view.WindowLeaked: Activity com.mw.alahdal.amjad.mwlcopytwo.MainActivity has leaked window android.widget.ZoomButtonsController$Container{11ddaec7 V.E..... ......I. 0,0-1029,146} that was originally added here
        at android.view.ViewRootImpl.<init>(ViewRootImpl.java:363)
        at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:261)
        at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
        at android.widget.ZoomButtonsController.setVisible(ZoomButtonsController.java:370)
        at com.android.org.chromium.android_webview.AwZoomControls.invokeZoomPicker(AwZoomControls.java:29)
        at com.android.org.chromium.content.browser.ContentViewCore.onScrollBeginEventAck(ContentViewCore.java:1270)
        at com.android.org.chromium.content.browser.ContentViewCore.nativeOnTouchEvent(Native Method)
        at com.android.org.chromium.content.browser.ContentViewCore.onTouchEvent(ContentViewCore.java:1208)
        at com.android.org.chromium.android_webview.AwContents$AwViewMethodsImpl.onTouchEvent(AwContents.java:2312)
        at com.android.org.chromium.android_webview.AwContents.onTouchEvent(AwContents.java:1698)
        at com.android.webview.chromium.WebViewChromium.onTouchEvent(WebViewChromium.java:1910)
        at android.webkit.WebView.onTouchEvent(WebView.java:2286)
        at android.view.View.dispatchTouchEvent(View.java:8388)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2424)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2158)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2172)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2172)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2172)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2172)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2172)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2172)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2172)
        at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2314)
        at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1692)
        at android.app.Activity.dispatchTouchEvent(Activity.java:2739)
        at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2275)
        at android.view.View.dispatchPointerEvent(View.java:8578)
        at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4021)
        at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3887)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3449)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3502)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3468)
        at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3578)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3476)
        at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3635)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3449)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3502)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3468)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3476)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3449)
        at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5701)
        at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5675)
a
  07-29 08:38:34.239  18765-18798/com.mw.alahdal.amjad.mwlcopytwo D/MediaResourceGetter﹕ no ethernet/wifi connection detected



    07-29 08:38:34.239  18765-18798/com.mw.alahdal.amjad.mwlcopytwo W/MediaResourceGetter﹕ non-file URI can't be read due to unsuitable network  conditions
    07-29 08:38:34.239  18765-18798/com.mw.alahdal.amjad.mwlcopytwo E/MediaResourceGetter﹕ Unable to configure metadata extractor

像这样处理 webview 后退导航...

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