简体   繁体   English

按下“后退按钮”以返回Web视图

[英]Go back in webview by pressing “back button”

How can I go back one page while in webview? 在网络视图中如何返回上一页? For example: I am on my app in activity and browsing pages in webview, but once I press back button it will exit the app or just goes back in activity instead of the page.. 例如:我正在活动中使用我的应用程序,并在webview中浏览页面,但是一旦按下后退按钮,它将退出应用程序或只是返回活动状态而不是页面。

I have done my research and overriding onBackPressed function doesnt work. 我已经完成研究,并且覆盖onBackPressed函数无法正常工作。

@Override
public void onBackPressed() {
    if (myWebView.canGoBack()) {
        myWebView.goBack();
    } else {
        super.onBackPressed();
    }
}

Whole fragment code: 整个片段代码:

 public class FragmentTwo extends Fragment {


    public FragmentTwo() {
        // Required empty public constructor
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


    }

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

    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState){

        WebView webView = (WebView) getActivity().findViewById(R.id.webView);

        WebSettings webSettings = webView.getSettings();
        webView.setScrollbarFadingEnabled(false);
        webSettings.setJavaScriptEnabled(true);
        webView.setWebViewClient(new WebViewClient());
        webView.loadUrl("http://myapp.com");

    }


}

Any suggestions of how to achieve it? 关于如何实现的任何建议?

onBackPressed() is method of Activity, not of a Fragment, so this code will never be invoked. onBackPressed()是Activity的方法,而不是Fragment的方法,因此永远不会调用此代码。 If you want to do something on back press, your parent activity must let your fragment know about it - you must implement onBackPressed() in parent activity and in that method you should call fragments' method (or fire event on event bus, or use listeners, callback, whatever). 如果要在回压时执行某些操作,则您的父活动必须让您的片段知道它-您必须在父活动中实现onBackPressed() ,并且在该方法中您应该调用片段的方法(或事件总线上的fire事件,或侦听器,回调等)。

Also right method name is onCreateView() , not onViewCreated() - this one won't be called either. 正确的方法名称是onCreateView() ,而不是onViewCreated() -此方法也不会被调用。

Inside of the your OnCreateView: 在您的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);

      webView = (WebView) view.findViewById(R.id.webView);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.setWebViewClient(new MyWebViewClient());
        webView.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: 在您的MainActivity中,将其编写为:

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

yourname_Fragmen.java= This is your nameFragment that content the Webview yourname_Fragmen.java =这是满足Webview的nameFragment

webView= The name of your WebView (id) webView =您的WebView的名称(id)

Now. 现在。 Inside of your Fragment you have to declare static global variable 在片段内部,您必须声明静态全局变量

public static Webview webView;

NOTE: If you have more than one fragment you have to check if this instance is different of NULL; 注意:如果您有多个片段,则必须检查此实例是否为NULL;

And that's it! 就是这样! Good luck! 祝好运!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM