vonatar
vonatar

Reputation: 64

Android WebView Fragment GoBack();

Here's my webview drawer app.. It's making me crazy, i can't understand how to insert a "goBack" function like in normal WebView. Here's my code:

package com.my.app;

import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.webkit.WebViewClient;




public class WebViewFragment extends Fragment {

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

        // Retrieving the currently selected item number
        int position = getArguments().getInt("position");

        String url = getArguments().getString("url");

        // List of rivers
        String[] menus = getResources().getStringArray(R.array.menus);

        // Creating view corresponding to the fragment
        View v = inflater.inflate(R.layout.fragment_layout, container, false);

        // Updating the action bar title
        getActivity().getActionBar().setTitle(menus[position]);

        //Initializing and loading url in webview
        WebView webView = (WebView)v.findViewById(R.id.webView);        
        webView.getSettings().setJavaScriptEnabled(true);
        webView.loadUrl(url);
        webView.setWebViewClient(new WebViewClient());

        return v;

    }
}

I've already checked more than 20+ answers here on Stack, but without results.

Hope someone can explain me a bit how to use the function GoBack and help me with this stressing thing..

Thanks in advance, Davide

Upvotes: 0

Views: 1266

Answers (2)

Cristofer
Cristofer

Reputation: 1106

Inside of the your OnCreateView:

 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        view = inflater.inflate(R.layout.your_layout, container, false);

      mWebView = (WebView) view.findViewById(R.id.webView);
        mWebView.getSettings().setJavaScriptEnabled(true);
        mWebView.setWebViewClient(new MyWebViewClient());
        mWebView.loadUrl(expertsUrl);

        return view;
    }


private class MyWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    }

Ok! In your MainActivity you will write it:

     @Override
        public void onBackPressed() {
if (WebViewFragment.mWebView!=null) {
            if (WebViewFragment.mWebView.canGoBack()) {
                WebViewFragment.mWebView.goBack();
            }
}
        }

WebViewFragment= This is your nameFragment that content the Webview

mWebView= The name of your WebView (id)

Now. Inside of your Fragment you have to declare static global variable

public static Webview mWebView;

And that's it! Good luck!

Upvotes: 2

SavageKing
SavageKing

Reputation: 544

Since you are using a fragment, you have to override your activity onbackpressed() method and then test to see what fragment you are using. If you are using the fragment with the webview in it when the user tries to go back then see if the webview can go back. The code would look something like this.

  @override
  public void onBackPressed()
  {
     //get a reference to your webviewfragment before this line
     //perhaps find the fragment by tag

     if(webviewFragment.isVisible()) 
        {


               WebView mWebView = webviewFragment.getWebView(); 

                  if(mWebView.canGoBack())
                   {
                        mWebView.goBack();
                        return; 
                   } 
        }

        super.onBackPressed();

       }

something like that, not exactly like it but close.

Upvotes: 1

Related Questions