我已经在片段中创建了一个WebView,但是当我尝试按下返回按钮时,它会杀死应用程序而不是返回。我想要的是按下后退按钮时返回,如果我已经在主页上,则后面按钮应杀死该应用程序。
我尝试使用给定链接中的所有解决方案。
如何添加"回去"片段中的WebView中的功能?
请帮助。
您可以通过调用getfragmentManager()。popbackstackimmediate()或getSupportFragmentManager()。)如下所示:
@Override
public void onBackPressed() {
if (!getFragmentManager().popBackStackImmediate()) {
super.onBackPressed();
}
}
不要忘记致电.addtobackstack(null),然后再调用commit()将fragmentTransaction添加到背stack中。
并且如果要按返回按钮以返回上一个网页用户在WebView中已导航,请在返回以前的片段之前,可以执行此操作:
@Override
public void onBackPressed() {
if (webView.canGoBack()) {
webView.goBack();
} else if (!getFragmentManager().popBackStackImmediate()) {
super.onBackPressed();
}
}
并记住将WebView设置为加载WebView中的任何网页,通过调用WebView.setWebViewClient(new WebViewClient());
如果您使用了活动中的Web片段和其他片段,则此代码有效:
在您的活动中:
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
// Webview back
if (getSupportFragmentManager().findFragmentById(R.id.fragment_content) instanceof YourWebFragment){
final YourWebFragment webFragment = (YourWebFragment) getSupportFragmentManager().findFragmentById(R.id.fragment_content);
if (webFragment != null){
if (webFragment.onBackPressed()){
return;
}
}
}
// Fragments back
if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
getSupportFragmentManager().popBackStack();
} else {
super.onBackPressed();
}
}
}
在您的网络片段中:
public boolean onBackPressed() {
if (webView.canGoBack()) {
webView.goBack();
return true;
}
return false;
}
参考:https://stackoverflow.com/a/19268540/1329094和https://stackoverflow.com/a/10631591/1329094
在Kotlin中,您可以通过在WebView中添加SetOnKeyListener来实现这一目标。此侦听器响应设备硬件按钮的点击。
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val myWebView: WebView = view.findViewById(R.id.your_webView)
myWebView.webViewClient = WebViewClient()
myWebView.loadUrl("https://www.google.com/")
myWebView.setOnKeyListener { v, keyCode, event ->
if (keyCode == KeyEvent.KEYCODE_BACK && myWebView.canGoBack()) {
myWebView.goBack() // Navigate back to previous web page if there is one
nested_scroll.scrollTo(0, 0) // Scroll webview back to top of previous page
}
true
}
}