2016-03-30 119 views
1

我正在嘗試爲android編程,並遇到一些小問題。我做了一個應用程序,但我無法使手機按鈕後退,返回到前一頁,沒有完全關閉應用程序。我正在使用WebView。當我按下按鈕時,WebView正在關閉安卓鍵盤

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


     getSupportActionBar().hide(); 

     // CODIGO DO WEB VIEW 

     final WebView myWebView = (WebView) findViewById(R.id.webView); 
     myWebView.loadUrl("http://www.idestudos.com.br"); 
     WebSettings webSettings = myWebView.getSettings(); 
     webSettings.setJavaScriptEnabled(true); 
     webSettings.setSupportZoom(true); 
     webSettings.setBuiltInZoomControls(true); 

     myWebView.setWebViewClient(new MyBrowser()); 

     myWebView.setWebViewClient(new WebViewClient() { //CODE WEBVIEW} 
+0

在你的logcat中有什麼相關的東西嗎?我的錢會出現NullPointerException,或者至少是某種變體的例外。 –

+0

檢查此http://developer.android.com/reference/android/webkit/WebViewClient.html#onPageStarted以處理URL更改。您可能需要繼續存儲您的WebView正在加載的實際URL(每更新一次URL),然後覆蓋onBackPressed()方法,以便您的應用程序在您的WebView中加載先前的URL而不是完成整個活動。 –

回答

1

這裏有一個解決方案:

當你的WebView重寫URL負載,它會自動累計訪問的網頁的歷史記錄。您可以使用goBack()和goForward()在歷史記錄中向後和向前導航。

例如,這裏是你的活動如何使用設備後退按鈕向後導航:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
// Check if the key event was the Back button and if there's history 
if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) { 
    myWebView.goBack(); 
    return true; 
} 
// If it wasn't the Back key or there's no web page history, bubble up to the default 
// system behavior (probably exit the activity) 
return super.onKeyDown(keyCode, event); 
} 

時退房Building Web Apps in WebView Android開發者指南的詳細信息

希望它可以幫助你!

+0

插入OnCreate方法? –

+0

插入它,無論你創建你的webview並初始化它。希望能幫助到你! –

1

通過調用canGoBack輕鬆實現。

if(webView.canGoBack()) { 
     webView.goBack(); 
    } 

而且從onBackPressed方法內部調用它的活動是這樣的:

@Override public void onBackPressed() { 

    if(webView != null && webView.canGoBack()) { 
     webView.goBack(); 
    } else { 
     super.onBackPressed(); 
    } 
} 
+0

你也必須返回一個'onKeyDown'。否則,如果用戶點擊後退按鈕,並且沒有歷史記錄,則不會發生任何事情。 –

+0

不,只要你不回覆super.onBackPressed,他應該沒問題。 – SacreDeveloper

+0

如果'webView.canGoBack()'爲false,則需要'返回onBackPressed'。我看到你已經編輯了你的答案 –