1

I am making an Android application which have some items in Navigation Drawer and every item contain link for different pages of a website, Now i want to implement onKeyDown method or onBackPrssed method for webView, How can i achieve this my Navigation Drawer using Fragments.

HomeFragment.java

public class HomeFragment extends Fragment {
    WebView webView;
    ProgressDialog progressDialog;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view=inflater.inflate(R.layout.home_fragment, container, false);
        webView = (WebView) view.findViewById(R.id.webView);
        homePage();
        return view;
    }

    public void homePage()
    {

        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setBuiltInZoomControls(true);
        webView.getSettings().setDisplayZoomControls(false);
        webView.loadUrl("http://google.com/");
        webView.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return false;
            }

            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
                progressDialog = new ProgressDialog(getActivity());
                progressDialog.setTitle("Loading");
                progressDialog.setMessage("Your page is loading...");
                progressDialog.setCancelable(false);
                progressDialog.setCanceledOnTouchOutside(false);
                progressDialog.show();
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                progressDialog.dismiss();
            }
         });
        webView.setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View view, int keyCode, KeyEvent keyEvent) {
                if((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack())
                {
                    webView.goBack();
                    return true;
                }
                return false;
            }
        });
    }


}

HomeFragment is open after Navigation Drawer item clicked and it will open a webpage. setOnClickListener not working fine it redirect me to first page not previous page.

gaurav
  • 39
  • 9
  • Possible duplicate of [How to add "Go Back" function in WebView inside Fragment?](http://stackoverflow.com/questions/10631425/how-to-add-go-back-function-in-webview-inside-fragment) – Satan Pandeya Mar 27 '17 at 09:51

1 Answers1

-1

Reference the android training and use:

implementing navigation drawer

On the example provided there you can see

// Set the list's click listener
mDrawerList.setOnItemClickListener(new DrawerItemClickListener());

implement it like this

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            switch (i){
                case 0:{
                    webView.loadUrl("http://example.com");
                    break;
                }
                case 1:{
                    webView.loadUrl("http://example2.com");
                    break;
                }
                default:{
                    webView.loadUrl("http://default.com");
                    break;
                }
            }
        }
    });

the onKeyDown method is used to catch events such as: back, forward, refresh, etc..

Edit: Ok so whats looks to be going on is this: You need to override the onBackPressed() on your hosting Activity and make sure you dont let it to go to super() as probably the super() goes back to the first fragment which shows the first page on the webview

J. N
  • 193
  • 1
  • 5