Comment revenir à la page précédente si le bouton retour est enfoncé dans WebView?

J’ai une application dans laquelle j’ai une WebView laquelle WebView des sites Web. Cela fonctionne, en cliquant sur un lien dans la page Web va à la page suivante dans le site Web dans mon application. Mais quand je clique sur le bouton de retour du téléphone, cela m’amène directement dans mon application. Je veux plutôt revenir à la page précédente du site. Comment puis-je faire ceci?

Voici l’exemple de code que j’utilise:

 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.ssortingng.app_name); } }); } } 

J’utilise quelque chose comme ça dans mes activités avec 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); } 

Modifier:

Pour que ce code fonctionne, vous devez append un champ à l’ Activity contenant WebView:

 private WebView mWebView; 

Initialisez-le dans la méthode onCreate() et vous devriez y aller.

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

Si vous utilisez Android 2.2 et les versions ultérieures (qui sont la plupart des appareils maintenant), le code suivant vous fournira ce que vous voulez.

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

Ceci est ma solution. Cela fonctionne aussi dans le fragment.

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

Pourquoi ne pas utiliser onBackPressed() ?

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

La mise au point doit également être activée sur BackPressed

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

Référence complète pour le bouton suivant et la barre de progression: retour et bouton suivant dans Webview

Si vous voulez revenir en arrière lorsque vous cliquez sur le bouton de retour du téléphone, utilisez ceci:

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

Vous pouvez également créer un bouton de retour personnalisé comme ceci:

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

voici un code avec confirmation de sortie:

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

Vous devriez les bibliothèques suivantes sur votre classe gérer le onBackKeyPressed. canGoBack () vérifie si la vue Web peut faire référence à la page précédente. Si c’est possible, utilisez la fonction goBack () pour référencer la page précédente (revenir en arrière).

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

Webview in Activity, Le code ci-dessous a fonctionné pour moi, Termine l’activité après le chargement de l’URL dans webview.in onbackpressed passe à l’activité précédente

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