0

I am coding an app with Android Studio. I started a few days ago. I want to put a WebView in a fragment. Because I use Fragment to present WebView I cannot override onBackPressed to handle back button events. I'm trying to achieve the behaviour of opening previous page of WebView when back button pressed. I found this code:

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

But this doesn't work in a fragment. Can someone help me with this example or in general how I could write my normal code in the fragment class.

Jenea Vranceanu
  • 4,530
  • 2
  • 18
  • 34
Rexan
  • 19
  • 7

2 Answers2

0

you can use backPressDispacher like this:

 @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        requireActivity().getOnBackPressedDispatcher().addCallback(getViewLifecycleOwner(), new OnBackPressedCallback(true) {
            @Override
            public void handleOnBackPressed() {
                if(webView.canGoBack()){
                   webView.goBack();
                 }else{
                    navigationController.popBackStack() // I'm assuming you are using navigation component
                  }
            }
        });
    }

If you are not using navigation component this should work fine if not handle your backpress as you need inside else block

Sujan Poudel
  • 794
  • 5
  • 16
0

try this code inside your onCreateView method in Fragment

webView.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();
                        }  else {
                            getActivity().onBackPressed();
                        }
                    }
                }
            }

            return true;
        }
    });
Michael
  • 411
  • 2
  • 6
  • 15