2011-12-01 120 views
2

我有一個難以置信的困難時間讓下面的應用程序不按下後退按鈕時顯示錯誤。我只想要網站加載一個網頁和後退按鈕,就像平時一樣執行。有沒有人在這裏看到任何錯誤? LogCat顯示沒有錯誤,使用模擬器不會中斷,但它在我的平板電腦上始終斷開。後退按鈕觸發意外停止

MyWebViewClient.java

package com.MySite; 

import android.webkit.WebView; 
import android.webkit.WebViewClient; 

public class MyWebViewClient extends WebViewClient { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     view.loadUrl(url); 
     return true; 
    } 
} 

MySite.java

package com.mysite; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.KeyEvent; 
import android.webkit.WebView; 

public class MySite extends Activity { 
    WebView DCWebView; 

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

     //init webview 
     WebView DCWebView = (WebView) findViewById(R.id.webview); 
     DCWebView.getSettings().setJavaScriptEnabled(true); 
     DCWebView.loadUrl("http://mobile.mysite.com"); 

     //when a link is clicked, use the WebView instead of opening a new browser 
     DCWebView.setWebViewClient(new MyWebViewClient()); 
    } 

    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if ((keyCode == KeyEvent.KEYCODE_BACK) && DCWebView.canGoBack()) { 
      DCWebView.goBack(); 
      return true; 
     } 
     return super.onKeyDown(keyCode, event); 
    } 
} 

回答

1

您在onCreate()中聲明瞭一個名爲DCWebView的局部變量。更改線路

WebView DCWebView = (WebView) findViewById(R.id.webview); 

DCWebView = (WebView) findViewById(R.id.webview); 

然後,按下後​​退鍵時,會有一個回棧(當你調用DCWebView.canGoBack()這是目前假的,因爲你的全球DCWebView從未初始化),後退按鈕將按照您期望的方式處理。

+0

你是說'把WebView'放在那裏,我把它定義爲全局的? – Webnet

+0

是的!有用!!! – Webnet

+1

要回復您的第一條評論,當您在方法中聲明瞭'DCWebView'時,它會覆蓋同名的全局變量。因此,那是你在方法中使用的'DCWebView' - 而不是你想要使用的那個。 – Phil

1

什麼錯誤你得到,當你打回的平板電腦嗎?你有沒有嘗試覆蓋onBackPressed而不是onKeyDown?

+0

我應該把'this.finish()放在onBackPressed中嗎? – Webnet

+0

如果您想要關閉活動並返回到前一活動(無論您是否推出DealClippings),則調用finish()應該可以做到這一點,是的。 – Chris

+0

onBackPressed的默認功能是執行finish(),因此在我自己的應用程序中定義它將不會執行任何操作: - \ – Webnet

相關問題