如果在WebView中按下返回按钮,如何返回上一页?

我有一个应用程序,我有一个WebView ,我显示一些网站。 它的工作原理,单击网页中的链接到我的应用程序内的网站的下一页。 但是,当我点击手机的后退按钮,它直接进入我的应用程序。 我想回到网站上的前一页。 我该怎么做?

这里是我使用的代码示例:

 public class Webdisplay extends Activity { @Override public void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); this.getWindow().requestFeature(Window.FEATURE_PROGRESS); setContentView(R.layout.webdisplay); getWindow().setFeatureInt(Window.FEATURE_PROGRESS, Window.PROGRESS_VISIBILITY_ON); Toast loadingmess = Toast.makeText(this, "Cargando El Diario de Hoy", Toast.LENGTH_SHORT); loadingmess.show(); WebView myWebView; myWebView = (WebView) findViewById(R.id.webview); myWebView.getSettings().setJavaScriptEnabled(true); myWebView.loadUrl("http://www.elsalvador.com"); myWebView.setWebViewClient(new WebViewClient()); myWebView.setInitialScale(1); myWebView.getSettings().setBuiltInZoomControls(true); myWebView.getSettings().setUseWideViewPort(true); final Activity MyActivity = this; myWebView.setWebChromeClient(new WebChromeClient() { public void onProgressChanged(WebView view, int progress) { MyActivity.setTitle("Loading..."); MyActivity.setProgress(progress * 100); if(progress == 100) MyActivity.setTitle(R.string.app_name); } }); } } 

我在使用WebViews的活动中使用类似这样的东西:

 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (event.getAction() == KeyEvent.ACTION_DOWN) { switch (keyCode) { case KeyEvent.KEYCODE_BACK: if (mWebView.canGoBack()) { mWebView.goBack(); } else { finish(); } return true; } } return super.onKeyDown(keyCode, event); } 

编辑:

要使此代码正常工作,您需要向包含WebView的Activity添加一个字段:

 private WebView mWebView; 

onCreate()方法中初始化它,你应该很好。

 mWebView = (WebView) findViewById(R.id.webView); 

如果使用Android 2.2或更高版本(现在是大多数设备),下面的代码将得到你想要的。

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

这是我的解决方案。 它也可以在片段中工作。

 webView.setOnKeyListener(new OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if(event.getAction() == KeyEvent.ACTION_DOWN) { WebView webView = (WebView) v; switch(keyCode) { case KeyEvent.KEYCODE_BACK: if(webView.canGoBack()) { webView.goBack(); return true; } break; } } return false; } }); 

为什么不使用onBackPressed()

 @Override public void onBackPressed() { // super.onBackPressed(); Do not call me! // Go to the previous web page. } 

聚焦也应该在onBackPressed中检查

  @Override public void onBackPressed() { if (mWebview.isFocused() && mWebview.canGoBack()) { mWebview.goBack(); } else { super.onBackPressed(); finish(); } } 

这里是确认退出的代码:

 @Override public void onBackPressed() { if(webView.canGoBack()){ webView.goBack(); }else{ new AlertDialog.Builder(this) .setIcon(android.R.drawable.ic_dialog_alert) .setTitle("Exit!") .setMessage("Are you sure you want to close?") .setPositiveButton("Yes", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { finish(); } }) .setNegativeButton("No", null) .show(); } } 

如果您想要点击手机的后退按钮时返回页面,请使用以下命令:

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

您也可以像这样创建自定义后退按钮:

 btnback.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if (wv.canGoBack()) { wv.goBack(); } } }); 

下一个按钮和进度条的完整引用: 在webview中放回和下一个按钮

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

你应该在你的类的下面的库处理onBackKeyPressed。 canGoBack()检查webview是否可以引用前一页。 如果可以的话,使用goBack()函数引用前一页(返回)。

  @Override public void onBackPressed() { if( mWebview.canGoBack()){ mWebview.goBack(); }else{ //Do something else. like trigger pop up. Add rate app or see more app } } 

Webview在活动中,下面的代码为我工作,完成活动之后加载Url在webview.in onbackpressed它去上一个活动

  webView = (WebView) findViewById(R.id.info_webView); webView.loadUrl(value); finish();