片段内 android webview 中的后退按钮
Back button in android webview within a fragment
我已经在一个片段中创建了一个 webview,但是当我试图按下后退按钮时,它正在终止应用程序而不是返回。我想要的是当我按下后退按钮时返回,如果我已经在主页上,后退按钮应该终止应用程序。
我已经尝试使用给定 link 中的所有解决方案。
How to add "Go Back" function in WebView inside Fragment?
请帮忙。
您可以重写Activity的onBackPressed()方法并通过调用getFragmentManager().popBackStackImmediate()或getSupportFragmentManager().popBackStackImmediate( ) 就像下面的代码:
@Override
public void onBackPressed() {
if (!getFragmentManager().popBackStackImmediate()) {
super.onBackPressed();
}
}
在调用 commit() 将片段事务添加到后台堆栈之前,不要忘记调用 .addToBackStack(null)。
如果你想按后退按钮返回到用户在返回上一个片段之前在 WebView 中导航过的上一个网页,你可以这样做:
@Override
public void onBackPressed() {
if (webView.canGoBack()) {
webView.goBack();
} else if (!getFragmentManager().popBackStackImmediate()) {
super.onBackPressed();
}
}
并记住通过调用 webView.setWebViewClient(new WebViewClient()); 将您的 webView 设置为加载 WebView 中的任何网页;
如果您在 activity 中使用 Web 片段和其他片段,此代码有效:
在你的Activity中:
@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;
}
参考:
和
在 Kotlin 中,您可以通过将 setOnKeyListener 添加到 WebView 来实现此目的。此侦听器响应设备硬件按钮上的点击。
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
}
}
我已经在一个片段中创建了一个 webview,但是当我试图按下后退按钮时,它正在终止应用程序而不是返回。我想要的是当我按下后退按钮时返回,如果我已经在主页上,后退按钮应该终止应用程序。
我已经尝试使用给定 link 中的所有解决方案。
How to add "Go Back" function in WebView inside Fragment?
请帮忙。
您可以重写Activity的onBackPressed()方法并通过调用getFragmentManager().popBackStackImmediate()或getSupportFragmentManager().popBackStackImmediate( ) 就像下面的代码:
@Override
public void onBackPressed() {
if (!getFragmentManager().popBackStackImmediate()) {
super.onBackPressed();
}
}
在调用 commit() 将片段事务添加到后台堆栈之前,不要忘记调用 .addToBackStack(null)。
如果你想按后退按钮返回到用户在返回上一个片段之前在 WebView 中导航过的上一个网页,你可以这样做:
@Override
public void onBackPressed() {
if (webView.canGoBack()) {
webView.goBack();
} else if (!getFragmentManager().popBackStackImmediate()) {
super.onBackPressed();
}
}
并记住通过调用 webView.setWebViewClient(new WebViewClient()); 将您的 webView 设置为加载 WebView 中的任何网页;
如果您在 activity 中使用 Web 片段和其他片段,此代码有效:
在你的Activity中:
@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;
}
参考: 和
在 Kotlin 中,您可以通过将 setOnKeyListener 添加到 WebView 来实现此目的。此侦听器响应设备硬件按钮上的点击。
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
}
}