片段中的Android WebView中的后按钮



我已经在片段中创建了一个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
    }
}

最新更新