簡體   English   中英

按后退按鈕退出應用程序,而不是在 WebView 中向后導航

[英]Pressing back button exits the app instead of navigating backwards in the 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.
                }
            }
        });
    }
}

這不會返回,而是退出應用程序。 任何幫助,將不勝感激。

將此添加到您的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否則您將不會加載任何鏈接。

在您的代碼中,您在 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();
    }
}

另請參閱入門:Android 中面向 Web 開發人員的基於 WebView 的應用程序

我們可以使用 webview 方法來向前和向后導航。 方法 boolean canGoForward() for 獲取此 WebView 是否具有轉發歷史記錄項。 canGoBack() for 獲取此 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;
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM