0

At my navigationDrawer from menu , by clicking search it opens a specific webview in a fragment . Works fine, but when I press back on that webview - instead of getting the last visited webscreen it comes back to my main fragment. how can i solve this? I'm providing my fragment java file here. please mention any other codes to need (if needed) to solve my problem


public class GoogleFragment extends Fragment {

public WebView mWebView;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View v = inflater.inflate(fragment_google, container, false);
    mWebView = (WebView) v.findViewById(webview);
    mWebView.loadUrl("https://google.com");

    // Enable Javascript
    WebSettings webSettings = mWebView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    //improve webview performance
    mWebView.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);
    mWebView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
    mWebView.getSettings().setAppCacheEnabled(true);
    mWebView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
    webSettings.setDomStorageEnabled(true);
    webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
    webSettings.setUseWideViewPort(true);
    webSettings.setSavePassword(true);
    webSettings.setSaveFormData(true);
    webSettings.setEnableSmoothTransition(true);

    // Force links and redirects to open in the WebView instead of in a browser
    mWebView.setWebViewClient(new WebViewClient());

    return v;
}

}
rjdkolb
  • 10,377
  • 11
  • 69
  • 89
  • 2
    Possible duplicate of [How to add "Go Back" function in WebView inside Fragment?](https://stackoverflow.com/questions/10631425/how-to-add-go-back-function-in-webview-inside-fragment) – Murat Karagöz Jul 25 '17 at 13:17

2 Answers2

0

I think when you press back button from fragment than we need to handle it inside of Activity,

You need to first Override onBackPressed() method in your main activity which having fragment and global assign Webview with public in your google fragment

NOTE : when you are adding or replacing fragment keep adding a TAG, it can be helpful for getting instance of fragment.

@Override
    public void onBackPressed() {
     Fragment fragment = 
     getFragmentManager().findFragmentByTag("google_fragment");
     if (fragment instanceof GoogleFragment) {
        if (webView.canGoBack()) {
            webView.goBack();
        } else {
            super.onBackPressed();
        }
    }else{
       super.onBackPressed();
    }
}
Mohit Suthar
  • 8,725
  • 10
  • 37
  • 67
0
public class GoogleFragment extends Fragment {

public WebView mWebView;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View v = inflater.inflate(fragment_google, container, false);
    mWebView = (WebView) v.findViewById(webview);
    mWebView.loadUrl("https://google.com");

    // Enable Javascript
    WebSettings webSettings = mWebView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    //improve webview performance


  mWebView.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);

  mWebView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
    mWebView.getSettings().setAppCacheEnabled(true);
    mWebView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
    webSettings.setDomStorageEnabled(true);
    webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
    webSettings.setUseWideViewPort(true);
    webSettings.setSavePassword(true);
    webSettings.setSaveFormData(true);
    webSettings.setEnableSmoothTransition(true);

    // Force links and redirects to open in the WebView instead of in a browser
    mWebView.setWebViewClient(new WebViewClient());

v.setFocusableInTouchMode(true);
v.requestFocus();

v.setOnKeyListener( new View.OnKeyListener()
{
@Override
public boolean onKey( View v1, int keyCode, KeyEvent event )
{
if( keyCode == KeyEvent.KEYCODE_BACK ) {


if(mWebView.canGoBack())
{
wView.goBack();
wView.getUrl();
}


return true;
}
return false;
}
} );
    return v1;
}
}

Please try this code .it may help you. 
PRATEEK BHARDWAJ
  • 2,364
  • 2
  • 21
  • 35