Comment revenir à la page précédente si le bouton Retour est pressé dans WebView?
J'ai une application dans laquelle j'ai un WebView
où j'affiche des sites Web. Cela fonctionne, en cliquant sur un lien dans la page web va à la page suivante dans le site web à l'intérieur de mon application. Mais quand je clique sur le bouton Retour du téléphone, il me prend directement dans mon application. Je veux revenir à la page précédente du site web à la place. Comment puis-je faire cela?
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.string.app_name);
}
});
}
}
10 réponses
J'utilise quelque chose comme ceci 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 ajouter un champ au Activity
contenant le WebView:
private WebView mWebView;
Initialisez-le dans la méthode onCreate()
et vous devriez être prêt à partir.
mWebView = (WebView) findViewById(R.id.webView);
Si vous utilisez Android 2.2 et supérieur (qui est la plupart des appareils maintenant), le code suivant vous donnera ce que vous voulez.
@Override
public void onBackPressed() {
if (webView.canGoBack()) {
webView.goBack();
} else {
super.onBackPressed();
}
}
C'est ma solution. Cela fonctionne également dans 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 vérifiée onBackPressed
@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: remettre et le bouton Suivant dans webview
Si vous voulez aller à la page de retour 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 confirmer la 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 le webview 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 trigger pop up. Add rate app or see more app
}
}
Webview dans L'activité, le code ci-dessous a fonctionné pour moi, terminez l'activité après avoir chargé l'Url webview.in onbackpressed il va à l'activité précédente
webView = (WebView) findViewById(R.id.info_webView);
webView.loadUrl(value);
finish();