Back to Webview

Asked

Viewed 576 times

1

I have an application with webview and I wish that when I click the back button of the mobile phone it goes back to previous page, I do not know how I do, someone helps me?

Below follows my code.

package brasil500.brasil500;

import android.app.Activity;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;

public class MainActivity extends Activity {
//Faz a verificacao da conexao com a internet
//Fim da Verifica��o de conexao com a internet

    private static final String TAG = "MainActivity";


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        // If a notification message is tapped, any data accompanying the notification
        // message is available in the intent extras. In this sample the launcher
        // intent is fired when the notification is tapped, so any accompanying data would
        // be handled here. If you want a different intent fired, set the click_action
        // field of the notification message to the desired intent. The launcher intent
        // is used when no click_action is specified.
        //
        // Handle possible data accompanying notification message.
        // [START handle_data_extras]
        if (getIntent().getExtras() != null) {
            for (String key : getIntent().getExtras().keySet()) {
                Object value = getIntent().getExtras().get(key);
                Log.d(TAG, "Key: " + key + " Value: " + value);
            }
        }
        // [END handle_data_extras]
















        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);


        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final WebView wv = (WebView) findViewById(R.id.webView);
        wv.setWebViewClient(new WebViewClient());
        final WebSettings ws= wv.getSettings();
        ws.setJavaScriptEnabled(true);
        ws.setSupportZoom(false);
        //news implementation
        ws.setSaveFormData(true);
        wv.loadUrl("https://terra.com.br");
        wv.getSettings().setUseWideViewPort(true);
        wv.getSettings().setLoadWithOverviewMode(true);
        wv.setWebChromeClient(new WebChromeClient());


        //Barra de Progress StackOverflow
       /* ProgressDialog progress = new ProgressDialog();
        progress.setMessage("Carregando");
        progress.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        progress.setIndeterminate(true);
        progress.show();*/


        //Barra de Progresso / Carregando
       final ProgressBar Pbar;
        Pbar = (ProgressBar) findViewById(R.id.progressBar);


        wv.setWebChromeClient(new WebChromeClient() {
            public void onProgressChanged(WebView view, int progress) {
                if (progress < 100 && Pbar.getVisibility() == ProgressBar.GONE) {
                    Pbar.setVisibility(ProgressBar.VISIBLE);
                }
                Pbar.setProgress(progress);
                if (progress == 100) {
                    Pbar.setVisibility(ProgressBar.GONE);

                }
            }
        });
        //Fim da Barra de Progresso / Carregando

        //Verifica se a internet está ativa no aparelho
       /* ConnectivityManager cManager = (ConnectivityManager) getSystemService(this.CONNECTIVITY_SERVICE);
        NetworkInfo ninfo = cManager.getActiveNetworkInfo();
        if(ninfo!=null && ninfo.isConnected()){
            Toast.makeText(this,"Conectado na internet", Toast.LENGTH_LONG).show();
        }else{
                //Caso não tenha internet, Recarrega a SplashScreen
                    Intent i = new Intent(MainActivity.this, splash_screen.class);
                    startActivity(i);
               //Caso não tenha internet, Recarrega a SplashScreen

            Toast.makeText(this,"Sua Internet Precisa estar Ativa. Estamos Tentando conectar...", Toast.LENGTH_LONG).show();
        }
*/

        /* Caso a pagina da web não funciona*/
        wv.setWebViewClient(new WebViewClient() {
            public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                Intent i = new Intent(MainActivity.this, error_webview.class);
                startActivity(i);

            }
        });
         /* Fim:: Caso a pagina da web não funciona*/


        }

//Fecha a Aplicacao Quando pressionar o botao voltar
@Override
public void onBackPressed(){
        Intent intent = new Intent(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_HOME);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
    }
   //Fecha a Aplicacao Quando pressionar o botao voltar

//Volta o Webview quando clicar em volta


//Volta o Webview quando clicar em volta

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

1 answer

2


First check if it is possible to return to the previous screen using the method canGoBack of your WebView. If yes, use the method goBack to return, otherwise use finish to end the current activity. See:

if (wv.canGoBack()) {
    wv.goBack();
} else {
    finish();
}

Insert the code into a View or even in onBackPressed(). Take an example:

@Override
public void onBackPressed(){
    // verifica se é possível voltar para 
    // uma pagina anterior no WebView
    if (wv.canGoBack()) {
        //volta para pagina anterior
        wv.goBack();
    } else {
        // finaliza atividade
        finish();
    }
}

For your case, as it is already using the method onBackPressed(), just put your code within the condition. See:

@Override
public void onBackPressed(){

    if (wv.canGoBack()) {              
        wv.goBack();
    } else {
        Intent intent = new Intent(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_HOME);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
    }        
}

Observing:

Your WebView needs to be global in order to be read within the onBackPressed.

Ex:

private WebView wv;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}
  • Thanks acklay, but when I open the application all right. the problem is now when I click back, it accuses error.

  • @Felipeedwardsvanstocher what error?

  • The app closes and appears: "The App ****Stopped"

  • @Felipeedwardsvanstocher But this problem here already solved?! If yes, I suggest you open another question for the possible error.

  • I believe that yes friend, anyway I will follow your recommendations, I am half Noob in stackoverflow rs. Thank you very beast.

  • @Felipeedwardsvanstocher precise, so there! = D

  • @Felipeedwardsvanstocher if you are going to ask another question for this possible problem, try not only to say that "The Application **** Has Stopped"... this is very broad, there are many factors that cause this. Ask the question the error that appears in your logcat. Good luck!

Show 2 more comments

Browser other questions tagged

You are not signed in. Login or sign up in order to post.