Estoy tratando de reemplazar el botón atrás de modo que se vuelve a la página anterior, pero sólo sale de la aplicación. Aquí;s el código.. por favor me dicen donde voy mal.

package com.example.thebase;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.KeyEvent;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
public class MainAccelerometer extends Activity implements AccelerometerListener{
WebView myWebView;
//Back Button Code
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(event.getAction() == KeyEvent.ACTION_DOWN){
switch(keyCode)
{
case KeyEvent.KEYCODE_BACK:
if(myWebView.canGoBack() == true){
myWebView.goBack();
}else{
finish();
}
return true;
}
}
return super.onKeyDown(keyCode, event);
}
//--------------------  
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.accelerometer_example_main);
//ENABLING JAVASCRIPT CODE
WebView myWebView = (WebView) findViewById(R.id.webview);
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
//WEBVIEW CODE
myWebView = (WebView) findViewById(R.id.webview);
myWebView.loadUrl("http://www.pingcampus.com/greedy/get_category.php");
//WebView client
myWebView.setWebViewClient(new HelloWebViewClient());
//Back Button
//------
};
//rest of the code
Esta es una mala pregunta.
Posibles duplicados de ¿Cómo volver a la página anterior si se pulsa el botón en WebView?

OriginalEl autor Arihant | 2013-11-25

2 Comentarios

  1. 21

    Tiene onBackPressed() método para anular lugar de onKeyDown(). Reemplazar onKeyDown() con onBackPressed() de la siguiente manera:

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

    EDITAR

    También comprobar 3ª línea en el onCreate()

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

    Que se está declarando myWebView como variable local de nuevo y la variable global no se crean instancias que está lanzando NullPointerException y se bloquea la aplicación.

    Así que cambia su 3ª línea de código de la siguiente manera:

    myWebView = (WebView) findViewById(R.id.webview);
    Esta es la manera correcta de hacerlo
    Si el anterior bloque de código que viene dentro de la onCreate o fuera de ella?
    fuera de onCreate()
    Me hizo pegar fuera de la onCreate pero como pulse el botón de atrás de la aplicación da error diciendo: «por Desgracia, este se ha detenido»
    comprobar mi edición

    OriginalEl autor TNR

  2. 2

    No hay necesidad de comprobar ACTION_DOWN. Just:

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
    //Check if the key event was the Back button and if there's history
    if( mWebView != null ) {
    if( (keyCode == KeyEvent.KEYCODE_BACK) && (mWebView.canGoBack()) ) {
    mWebView.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);
    }

    o, alternativamente, en lugar de onKeyDown() puede reemplazar onBackPressed():

    @Override
    public void onBackPressed() {
    if( mWebView != null ) {
    if( mWebView.canGoBack() ) {
    mWebView.goBack();
    return;
    }
    }
    return super.onBackPressed();
    }
    Si el anterior bloque de código que viene dentro de la onCreate o fuera de ella?
    este es un método de clase, y deben ir fuera de otros métodos (no puede hacerlo dentro de todos modos)

    OriginalEl autor Marcin Orlowski

Dejar respuesta

Please enter your comment!
Please enter your name here