How to add “Go Back” function in WebView inside Fragment?

前端 未结 13 2164
余生分开走
余生分开走 2020-11-27 05:21

UPDATE: Solved! Problem was related to my Viewpager not WebView.

I\'m trying to add a \"Go Back\" function to my WebView which is insid

13条回答
  •  一生所求
    2020-11-27 05:26

    This worked in my case

    public class FantasyFragment extends Fragment  implements SwipeRefreshLayout.OnRefreshListener {
    
    WebView webview;
    SwipeRefreshLayout swipeLayout;
    String currentUrl="https://www.stackoverflow.com/";
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View root = inflater.inflate(R.layout.fragment_stadium, container, false);
    
    
        swipeLayout = (SwipeRefreshLayout) root.findViewById(R.id.swipescreen);
        swipeLayout.setOnRefreshListener(this);
    
        return root;
    }
    
    @Override
    public void onStart() {
        super.onStart();
        LoadWeb();
    }
    
    public void LoadWeb() {
    
    
    
        webview = (WebView) getActivity().findViewById(R.id.webview786);
        swipeLayout.setRefreshing(true);
        webview.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);
        webview.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
        webview.getSettings().setAppCacheEnabled(true);
    
        WebSettings webSettings = webview.getSettings();
        webSettings.setJavaScriptEnabled(true);
    
        webSettings.setDatabaseEnabled(true);
        webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
        webSettings.setUseWideViewPort(true);
        webSettings.setSavePassword(true);
        webSettings.setSaveFormData(true);
        webSettings.setEnableSmoothTransition(true);
    
        webview.loadUrl(currentUrl);
    
        webview.setWebViewClient(new WebViewClient() {
            @Override
            public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                Snackbar.make(view, "Connection Error", Snackbar.LENGTH_LONG)
                        .setAction("Retry", new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                LoadWeb();
                            }
                        }).show();
            }
            @Override
            public void onPageFinished(WebView view, String url) {
                swipeLayout.setRefreshing(false);
                currentUrl = url;
                super.onPageFinished(view, url);
            }
        });
    
        webview.canGoBack();
        webview.setOnKeyListener(new View.OnKeyListener() {
    
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                if (keyCode == KeyEvent.KEYCODE_BACK
                        && event.getAction() == MotionEvent.ACTION_UP
                        && webview.canGoBack()) {
                    webview.goBack();
                    return true;
                }
                return false;
            }
        });
    }
    @Override
    public void onRefresh() {
        LoadWeb();
    }
    }
    

提交回复
热议问题