Как я могу записать свой обычный код во фрагмент? - PullRequest
0 голосов
/ 09 июля 2020

Я кодирую приложение с помощью Android Studio. Я начал несколько дней go. Я хочу поместить WebView во фрагмент. Поскольку я использую Fragment для представления WebView, я не могу переопределить onBackPressed для обработки событий кнопки возврата. Я пытаюсь добиться поведения открытия предыдущей страницы WebView при нажатии кнопки «Назад». Я нашел этот код:

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

Но это не работает во фрагменте. Может ли кто-нибудь помочь мне с этим примером или вообще, как я мог бы написать свой нормальный код в классе фрагментов.

Ответы [ 2 ]

0 голосов
/ 09 июля 2020

попробуйте этот код внутри вашего метода onCreateView во фрагменте

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;
        }
    });
0 голосов
/ 09 июля 2020

вы можете использовать backPressDispacher вот так:

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

Если вы не используете компонент навигации, это должно работать нормально, если вы не обрабатываете обратное нажатие, как вам нужно внутри блока else

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...