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
Ecco come si presenta il file MainActivity.kt
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.
Ecco un video dimostrativo
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//webview è il nome della variabile associata alla WebView | |
webview!!.goBack() |
Ecco come si presenta il file MainActivity.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) | |
} | |
} |
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
Posta un commento