2014-01-13 151 views
0

在我的webview应用程序中,我打开了一个用于在landscape中显示路线的网站。我还添加了onKeyDown函数()。但是,当一个链接被打开和返回键被按下的应用程序是关闭了,帮我解决当按下返回键时,webview应用程序强制关闭

WebActivity.java

package com.example.samworkshops; 



import android.app.Activity; 
import android.content.pm.ActivityInfo; 
import android.os.Bundle; 
import android.view.KeyEvent; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 

public class WebActivity extends Activity { 
    public WebView webview; 


    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     WebView webview = (WebView) findViewById(R.id.webview); 
     webview.setWebViewClient(new WebViewClient()); 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
     webview.getSettings().setJavaScriptEnabled(true); 
     webview.getSettings().setUseWideViewPort(true); 
     webview.getSettings().setLoadWithOverviewMode(true); 
     webview.loadUrl("http://app.samworkshops.org"); 

    } 
    @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) && webview.canGoBack()) { 
      webview.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); 
    } 
} 

回答

1

变化

WebView webview = (WebView) findViewById(R.id.webview); 
// declared again and initialized. becomes local to onCreate 

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

因为你已经有

public class WebActivity extends Activity { 
public WebView webview; // declared but this is never initialized 

我想它是一个NullPointerException导致崩溃

+0

+1添加到更加清晰的WebView'=的WebView(的WebView)findViewById(R.id.webview);'改变这一行 –

0

大概onKeyDown

做到这一点的onBackPressed()方法被调用之前调用。删除您onKeyDown,并把此一:

@Override 
    public void onBackPressed() { 
     if (webview.canGoBack()) { 
         webview.goBack(); 
         return; 
        } 
     super.onBackPressed(); 
    } 
0

你已经两次宣布WebView

试试这个:

替换此通过WebView webview = (WebView) findViewById(R.id.webview);

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

,也做到这一点

@Override 
    public void onBackPressed() { 
     webview.goBack(); 

    } 

之前,您将添加onBackPressed()方法请评论中,onKeyDown方法