在片段内的android webview中的后退按钮

时间:2017-03-12 15:30:05

标签: android android-studio android-fragments android-studio-2.2 android-studio-2.0

我在片段中创建了一个webview,但是当我尝试按下后退按钮时,它正在查杀应用而不是返回。我想要的是当我按下后退按钮时返回,如果我已经在主页上,后退按钮应该会杀死应用程序。

我尝试过在给定链接中使用所有解决方案。

How to add "Go Back" function in WebView inside Fragment?

请帮忙。

3 个答案:

答案 0 :(得分:0)

你可以覆盖Activity的onBackPressed()方法,并通过调用getFragmentManager()。popBackStackImmediate()或getSupportFragmentManager()。popBackStackImmediate()来检查backstack中是否有任何先前的片段弹回,如下代码所示:

@Override
public void onBackPressed() {
    if (!getFragmentManager().popBackStackImmediate()) {
        super.onBackPressed();        
    }
}

在调用commit()将fragmenttransaction添加到backstack之前,不要忘记调用.addToBackStack(null)。

如果你想按回按钮返回上一个网页,用户已经在WebView中导航,然后再回到上一个片段,你可以这样做:

@Override
public void onBackPressed() {
    if (webView.canGoBack()) {
            webView.goBack();
    } else if (!getFragmentManager().popBackStackImmediate()) {
        super.onBackPressed();        
    }
}

请记住将webView设置为通过调用webView.setWebViewClient(new WebViewClient())来加载WebView中的任何网页;

答案 1 :(得分:0)

如果您在活动中使用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();
        }
    }
}

在您的Web片段中:

public boolean onBackPressed() {
    if (webView.canGoBack()) {
        webView.goBack();
        return true;
    }
    return false;
}

参考: https://stackoverflow.com/a/19268540/1329094https://stackoverflow.com/a/10631591/1329094

答案 2 :(得分:0)

在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
    }
}