片段内 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
    }
}