Passa ai contenuti principali

Android Studio - WebView: navigare nella cronologia con il tasto indietro del dispositivo (parte 1)

In questo articolo vedremo come poter navigare nella cronologia (solo indietro) con il tasto indietro del dispositivo.

Normalmente con il tasto indietro del dispositivo si chiude l'applicazione, ma è possibile far eseguire altre operazioni.

Questo esempio permette di tornare indietro nelle pagine web visitate con un singolo tap sul tasto indietro del dispositivo e con un doppio tap si chiude l'applicazione.

Questo è il codice che permette di navigare all'indietro nella cronologia
//webview è il nome della variabile associata alla WebView
webview!!.goBack()
view raw webview_back.kt hosted with ❤ by GitHub

Ecco come si presenta il file MainActivity.kt
package com.dm.tutorialwebview7
import android.app.Service
import android.graphics.Bitmap
import android.net.ConnectivityManager
import android.net.NetworkInfo
import android.os.Bundle
import android.os.Handler //Importazione della Classe: Handler
import android.support.design.widget.Snackbar //Importazione della Classe: Snackbar
import android.support.v7.app.AppCompatActivity;
import android.view.Menu
import android.view.MenuItem
import android.view.View
import android.webkit.WebChromeClient
import android.webkit.WebView
import android.webkit.WebViewClient
import android.widget.Toast
import android.widget.Toast.*
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.content_main.*
class MainActivity : AppCompatActivity() {
var webview: WebView? = null
private var snackBar: Snackbar? = null
//variabili aggiunte per le verifica della connessione internet
var context = this
var connectivity : ConnectivityManager? = null
var info : NetworkInfo? = null
//fine variabili per la verifica della connessione internet
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setSupportActionBar(toolbar)
webview = findViewById(R.id.myweb)
webview!!.webViewClient = WebViewClient()
webview!!.settings.javaScriptEnabled = true
webview!!.webChromeClient = WebChromeClient()
webview!!.settings.domStorageEnabled = true
webview!!.settings.builtInZoomControls = true
webview!!.settings.setSupportZoom(true)
webview!!.overScrollMode = WebView.OVER_SCROLL_NEVER
webview!!.settings.useWideViewPort = true
webview!!.setInitialScale(1)
webview!!.loadUrl("https://davidetech.blogspot.com")
//controllo della connessione in fase di avvio dell'app
if(isConnected())
{
//aggiungere qui eventuale codice da eseguire se il dispositivo è connesso ad internet
}
else
{
//aggiungere qui eventuale codice da eseguire se il dispositivo NON è connesso ad internet
Toast.makeText(context, "Non connesso ad internet", LENGTH_LONG).show()
}
//fine del controllo
if(webview != null)
{
webview!!.webViewClient = object: WebViewClient(){
override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
progressBar.visibility = View.VISIBLE
super.onPageStarted(view, url, favicon)
}
override fun onPageFinished(view: WebView?, url: String?) {
progressBar.visibility = View.GONE
super.onPageFinished(view, url)
}
}
}
}
//funzione che verifica lo stato della connessione internet
fun isConnected() : Boolean
{
connectivity = context.getSystemService(Service.CONNECTIVITY_SERVICE) as ConnectivityManager
if(connectivity != null)
{
info = connectivity!!.activeNetworkInfo
if(info != null)
{
if(info!!.state == NetworkInfo.State.CONNECTED)
{
return true
}
}
}
return false
}
//fine della funzione che verifica lo stato della connessione internet
override fun onCreateOptionsMenu(menu: Menu): Boolean {
// Inflate the menu; questo aggiunge elementi alla barra delle azioni se è presente.
menuInflater.inflate(R.menu.menu_main, menu)
return true
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
// Gestisci i clic degli elementi della barra delle azioni qui.
// La barra delle azioni gestirà automaticamente i clic sul pulsante Home / Su,
// purché si specifichi un'attività principale in AndroidManifest.xml.
when (item.itemId) {
R.id.action_refresh -> {
//modificato il reload con questa riga di codice
webview!!.loadUrl(webview!!.getUrl().toString())
}
}
return true
}
/*Gestisce il doppio tap per uscire e il singolo tap per scorrere la cronologia all'indietro
sul tasto indietro del dispositivo (Back Key)*/
private var doubleBackToExitPressedOnce = false
override fun onBackPressed(){
snackBar = Snackbar.make(root_layout,"Premi due volte per uscire", Snackbar.LENGTH_LONG)
when {
doubleBackToExitPressedOnce -> {
super.onBackPressed()
return
}
//se clicco una sola volta navigo all'indietro nella cronologia
//va indietro di una pagina fino a che la cronologia è vuota
webview!!.canGoBack() -> run{
webview!!.goBack()
}
}
this.doubleBackToExitPressedOnce = true
snackBar!!.show()
//setto la variabile doubleBackToExitPressedOnce = false se è passato 1 secondo
//dall'ultimo tocco sul tasto indietro
Handler().postDelayed({ doubleBackToExitPressedOnce = false }, 1000)
}
}
Come si può vedere la funzione che permette di navigare indietro nella cronologia (riga 130) è stata inserita all'interno di una funzione che verifica se la cronologia è piena oppure vuota.
Maggiori dettagli su questa funzione in questo articolo.

Questo esempio prende spunto da questo articolo a cui è stata aggiunta la funzione goBack() di WebView.

Premendo il tasto indietro del dispositivo succede questo:

Ecco un video dimostrativo

Download Project
Download file APK


Commenti

Post popolari in questo blog

Android Studio - Impostare lingua app

In questo articolo vedremo come poter selezionare la lingua all'interno della nostra app. Nel precedente articolo in cui si parlava del file string.xml , la lingua dell'app veniva selezionata automaticamente in base alle impostazioni del dispositivo, mentre qui vedremo come poter selezionare a proprio piacimento la lingua che dovrà avere la nostra app indipendentemente dall'impostazione del dispositivo. Per prima cosa creare il layout Ecco un esempio do come può essere il file activity_main.xml Ora creare le stringhe di testo all'interno del file string.xml Ora creare la traduzione del file string.xml nelle varie lingua come descritto in questo articolo Il risultato sarà una serie di file string.xml delle varie lingue impostate. Ora queste di seguito sono tre funzioni che servono per: selezione della lingua salvataggio della selezione nelle preferenze dell'app caricamento della lingua quando si avvia l'app Ecco come si presenta il file Main...

Android Studio - Rinominare il progetto

Rinominare il progetto Android Studio ATTENZIONE!: non eseguire questa procedura se l'app è stata pubblicata su Google Play Store Quando si vuole cambiare nome al progetto: nome cartella in cui è contenuto il progetto package name bisogna eseguire questi passaggi: Andare nella cartella dove è contenuto il progetto Creare una copia del progetto in questione Rinominare la cartella copiata con il nome dell'app (non usare spazi tra le parole) Ora è necessario dire ad Android Studio il nome del nuovo progetto  Aprire Android Studio Aprire il progetto creato in precedenza Una volta caricato il progetto cliccare Build Cliccare Clean Project Attendere che venga eseguito il processo di "pulitura" Cliccare ancora su Build Cliccare su Rebuild Project Attendere che venga ricostruito il progetto Ora aprire la cartella app fino a visualizzare la cartella java Cliccare sull'ingranaggio  Deselezionare la voce Compact Middle Packa...

Arduino - Lettura tensione potenziometro e display LCD

Leggere il valore di un poteziometro (parte 2) Oggi vedremo come leggere il valore in tensione di un potenziometro collegato al pin Analogico A0 di Arduino.