WebView goBackMethod выводит меня из фрагмента веб-представления - PullRequest
0 голосов
/ 27 июня 2018

Я использую веб-просмотр внутри фрагмента. Я хочу реализовать onBackPress для фрагмента, чтобы приложение переходило от одной ссылки к предыдущей ссылке. Это мой следующий код

 @Override
public void onBackPressed() {
 //   super.onBackPressed();
    if(webView!=null && webView.canGoBack()) {
        webView.goBack();
    }
    else {
        super.onBackPressed();
    }
}

Я реализовал это внутри фрагмента через базовый фрагмент. Если я открываю несколько ссылок внутри веб-просмотра, он переходит к коду

webView.goBack ()

Но вместо того, чтобы возвращаться на предыдущую страницу, это выводит меня из фрагмента. Почему так происходит .?

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Используйте ChildFragmentManager и вставьте в него URL-адреса своего веб-представления.

В вашей деятельности

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getSupportFragmentManager().beginTransaction().add(R.id.content, WebFragment.newInstance(), "WEB_FRAGMENT_TAG")
                .addToBackStack(null)
                .commit();
    }

    @Override
    public void onBackPressed() {
        WebFragment fragment = (WebFragment) getSupportFragmentManager().findFragmentByTag("WEB_FRAGMENT_TAG");
        int stackEntryCount = fragment.getChildFragmentManager().getBackStackEntryCount();
        if (stackEntryCount > 0) {
            fragment.getChildFragmentManager().popBackStack();
            fragment.popUrlBack();
        } else {
            super.onBackPressed();
        }
    }
}

В вашем фрагменте

@Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        webView.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                getChildFragmentManager().beginTransaction().addToBackStack(url).commit();
            }
        });
    }

    public void popUrlBack() {
        webView.goBack();
    }
0 голосов
/ 27 июня 2018

Просто поместите приведенный ниже код в реализацию кнопки возврата

    switch (view.getId()){
            case R.id.imag_back:
                if (webview.canGoBack()) {
                    webview.goBack();
                } else {
                    finish();
                }
}

надеюсь, что это решит вашу проблему.

Также, пожалуйста, проверьте активность своих родителей для метода onbackpressed ()

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