Android 按后退按钮退出应用程序,而不是在WebView中向后导航

Android 按后退按钮退出应用程序,而不是在WebView中向后导航,android,webview,Android,Webview,我正在开发一个WebView android应用程序。我无法修复应用程序中的问题以进行反向导航。我正在使用此代码并尝试对其进行所有修改 public class DeviceActivity extends Activity { private WebView web; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInst

我正在开发一个WebView android应用程序。我无法修复应用程序中的问题以进行反向导航。我正在使用此代码并尝试对其进行所有修改

public class DeviceActivity extends Activity {
    private WebView web;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_layout);

        web = (WebView) findViewById(R.id.webView);
        web.getSettings().setJavaScriptEnabled(true);
        web.getSettings().setJavaScriptCanOpenWindowsAutomatically(false);
        web.getSettings().setPluginsEnabled(false);
        web.getSettings().setSupportMultipleWindows(false);
        web.getSettings().setSupportZoom(false);
        web.setVerticalScrollBarEnabled(false);
        web.setHorizontalScrollBarEnabled(false);

        // Our application's main page will be loaded
        web.loadUrl("file:///android_asset/fbp/index.html");

        web.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                return false;
            }

            public void onBackPressed() {
                if (web.canGoBack()) {
                    web.goBack();
                } else {
                    // My exit alert code goes here.
                }
            }
        });
    }
}
这不会向后导航,而是退出应用程序。
任何帮助都将不胜感激。

将此添加到您的
活动中
代码(不在
onCreate()
中或嵌套在其他任何地方)

这将通过
WebView
history堆栈返回,直到它为空,然后执行默认操作(在本例中,它完成活动)


您可能还应该将WebViewClient设置为让
shouldOverrideUrlLoading
返回
true
,否则您不会加载任何链接。

在代码中,您在onCreate()方法中保留了以下块

相反,在onBackPressed()中保留相同的代码,如下所示

@Override
public void onBackPressed() {
    if(web.canGoBack()) {
        web.goBack();
    } else {
        super.onBackPressed();
    }
}

另请参阅

我们可以使用webview方法向前和向后导航。方法boolean
canGoForward()
for获取此WebView是否具有正向历史记录项
canGoBack()
for获取此WebView是否有历史记录项
goBack()
返回此Web视图的历史记录,而
goForward()
继续此Web视图的历史记录。这是我的实现:

@Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.forward_btn:
                if (mWebView.canGoForward()){
                    mWebView.goForward();
                }else{
                    Toast.makeText(getApplicationContext(), "Tidak ada halaman lagi!", Toast.LENGTH_SHORT).show();
                }
                break;
            case R.id.backward_btn:
                if (mWebView.canGoBack()){
                    mWebView.goBack();
                }else{
                    Toast.makeText(getApplicationContext(), "Tidak bisa kembali!", Toast.LENGTH_SHORT).show();
                }
                break;
            case R.id.reload_btn:
                layoutLoading.setVisibility(View.VISIBLE);
                mWebView.reload();
                break;
            case R.id.back_btn:
                onBackPressed();
                break;
        }
    }

我在插入退出对话代码时遇到问题,可以在此处帮助我进行退出对话吗?当然-用您的特定问题、您尝试过的内容、出错的地方打开一个新问题,如果可以,我将提供帮助。:)
@Override
public void onBackPressed() {
    if(web.canGoBack()) {
        web.goBack();
    } else {
        super.onBackPressed();
    }
}
@Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.forward_btn:
                if (mWebView.canGoForward()){
                    mWebView.goForward();
                }else{
                    Toast.makeText(getApplicationContext(), "Tidak ada halaman lagi!", Toast.LENGTH_SHORT).show();
                }
                break;
            case R.id.backward_btn:
                if (mWebView.canGoBack()){
                    mWebView.goBack();
                }else{
                    Toast.makeText(getApplicationContext(), "Tidak bisa kembali!", Toast.LENGTH_SHORT).show();
                }
                break;
            case R.id.reload_btn:
                layoutLoading.setVisibility(View.VISIBLE);
                mWebView.reload();
                break;
            case R.id.back_btn:
                onBackPressed();
                break;
        }
    }