[英]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.