在Webview Android应用程序中返回导航

时间:2013-06-05 13:58:08

标签: android webview

我正在开发一个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.    

    }
 }
        });

}

 }

这不会导航回来,而是退出应用程序。 任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:15)

Activity代码中添加此代码(不在onCreate()或嵌套在其他地方)

@Override
public void onBackPressed() {
    if (web.copyBackForwardList().getCurrentIndex() > 0) {
        web.goBack();
    }
    else {
        // Your exit alert code, or alternatively line below to finish
        super.onBackPressed(); // finishes activity
    }
}

这将导航回WebView历史堆栈,直到它为空,然后执行默认操作(在这种情况下,它完成活动)。

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

答案 1 :(得分:0)

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

if (web.canGoBack()) {
        web.goBack();       
}
else {
    //My exit alert code goes here.    

}

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

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

也请参考Getting Started: WebView-based Applications for Web Developers in Android

答案 2 :(得分:0)

我们可以使用webview方法向前和向后导航。用于获取此WebView是否具有转发历史记录项的方法boolean canGoForward()canGoBack()用于获取此WebView是否具有后退历史记录项。 goBack()返回此WebView的历史,goForward()返回此WebView的历史。这是我的实现:

@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;
        }
    }