Amjad AL-Ahdal
Amjad AL-Ahdal

Reputation: 39

Handling Back Button to be WebNavigator

I am working in an application and I have created a WebView which displays the Website my Web View is inside a fragment. But, I have a problem handling the Back Button, it closes the application. I have tried to handle the back button as the followings :

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

This is inside

 onCreateView

It doesn't work. How can I handle the Back button to go back to the previous back and if there is no pages to be backed to. It closes the app.

This is my Fragment code :

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;

}

here is my 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

Upvotes: 0

Views: 183

Answers (1)

Rishad Appat
Rishad Appat

Reputation: 1808

Handle webview back navigation like this...

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

Upvotes: 1

Related Questions