In questo articolo vedremo come poter salvare alcune impostazione relative alla nostra app nel caso in cui sia composta da più Activity.
A differenza del precedente articolo in cui le preferenze venivano salvate e lette dalla stessa Activity, qui vedremo come poter salvare alcune impostazioni da una Activity e poterle utilizzare in una seconda Activity.
Ecco come si presenta il file activity_main.xml
Ecco come si presenta il file activity_second.xml
Ora passiamo al codice, SharedPreferences è suddiviso in due parte una di salvataggio e una di lettura.
(La sintassi è leggermente diversa da quella vista nel precedente articolo) Il salvataggio di SharedPreferences serve per memorizzare un valore di tipo numerico, stringa o booleano e deve essere eseguito in questo modo:
Mentre la lettura del valore salvato in SharedPreferences deve essere eseguita in questo modo:
Queste righe di codice che permettono la lettura di SharedPreferences devono essere inserite all'interno della funzione onCreate()
Vediamo ora queste righe di codice all'interno dell' esempio
Ecco come si presenta il file MainActivity.kt
Come si può vedere le righe di codice che eseguono il salvataggio e la lettura sono state inserite all'interno di due funzioni ripettivamente saveData() in modo da poter essere richiamata in diversi punti del codice e onCreate().
saveData() viene richiamata ogni volta che si clicca su un RadioButton in modo da memorizzare la scelta fatta.
Le righe di codice che permettono la lettura sono state inserite all'interno della funzione onCreate() e subito dopo viene eseguita la funzione loadData per applicare l'impostazione all'interno dell'app; in questo caso la selezione del RadioButton.
Ecco come si presenta il file SecondActivity.kt
Anche in questa Activity le righe di codice che permettono la lettura dell'impostazione salvata sono state inserite all'interno della funzione onCreate().
Ecco un video dimostrativo
A differenza del precedente articolo in cui le preferenze venivano salvate e lette dalla stessa Activity, qui vedremo come poter salvare alcune impostazioni da una Activity e poterle utilizzare in una seconda Activity.
Ecco come si presenta il file activity_main.xml
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
<?xml version="1.0" encoding="utf-8"?> | |
<LinearLayout | |
xmlns:android="http://schemas.android.com/apk/res/android" | |
xmlns:tools="http://schemas.android.com/tools" | |
android:layout_width="match_parent" | |
android:layout_height="match_parent" | |
tools:context=".MainActivity"> | |
<RadioGroup | |
android:layout_width="match_parent" | |
android:layout_height="match_parent" > | |
<RadioButton | |
android:id="@+id/radioButton1" | |
android:layout_width="match_parent" | |
android:layout_height="wrap_content" | |
android:text="Scelta 1" /> | |
<RadioButton | |
android:id="@+id/radioButton2" | |
android:layout_width="match_parent" | |
android:layout_height="wrap_content" | |
android:text="Scelta 2" /> | |
<RadioButton | |
android:id="@+id/radioButton3" | |
android:layout_width="match_parent" | |
android:layout_height="wrap_content" | |
android:text="Scelta 3" /> | |
<RadioButton | |
android:id="@+id/radioButton4" | |
android:layout_width="match_parent" | |
android:layout_height="wrap_content" | |
android:text="Scelta 4" /> | |
<Button | |
android:id="@+id/button2" | |
android:layout_width="wrap_content" | |
android:layout_height="wrap_content" | |
android:text="Apri senconda Activity" /> | |
</RadioGroup> | |
</LinearLayout> |
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
<?xml version="1.0" encoding="utf-8"?> | |
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" | |
xmlns:app="http://schemas.android.com/apk/res-auto" | |
xmlns:tools="http://schemas.android.com/tools" | |
android:layout_width="match_parent" | |
android:layout_height="match_parent" | |
tools:context=".SecondActivity"> | |
<TextView | |
android:id="@+id/textView" | |
android:layout_width="wrap_content" | |
android:layout_height="wrap_content" | |
android:layout_marginTop="260dp" | |
android:textColor="#000000" | |
android:textSize="18sp" | |
app:layout_constraintEnd_toEndOf="parent" | |
app:layout_constraintStart_toStartOf="parent" | |
app:layout_constraintTop_toTopOf="parent" /> | |
<Button | |
android:id="@+id/button" | |
android:layout_width="wrap_content" | |
android:layout_height="wrap_content" | |
android:layout_marginTop="62dp" | |
android:text="Torna indietro" | |
app:layout_constraintEnd_toEndOf="parent" | |
app:layout_constraintStart_toStartOf="parent" | |
app:layout_constraintTop_toBottomOf="@+id/textView" /> | |
</androidx.constraintlayout.widget.ConstraintLayout> |
(La sintassi è leggermente diversa da quella vista nel precedente articolo) Il salvataggio di SharedPreferences serve per memorizzare un valore di tipo numerico, stringa o booleano e deve essere eseguito in questo modo:
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
//dichiarazione di SharedPreferences in modalita privata (tutte le Activity dell'app possono accedervi) | |
val sharedPref: SharedPreferences = getSharedPreferences("Save Data", Context.MODE_PRIVATE) | |
//dichiarazione di voler modificare le SharedPreferences | |
val editor = sharedPref.edit() | |
//modifica della chiave "NOME_CHIAVE" con il valore della variabile nome_variabile | |
editor.putInt("NOME_CHIAVE", nome_variabile) | |
//applicazione (salvataggio) delle modifiche | |
editor.apply() |
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
/*recupero della scelta salvata, | |
* questa viene eseguita leggendo una chiave dal nome "PREF_RBN" con valore di default uguale a zero*/ | |
val sharedPref: SharedPreferences = getSharedPreferences("Save Data", Context.MODE_PRIVATE) | |
/*impostazione della variabile nome_variabile in base al valore salvato all'interno | |
* della chiave "NOME_CHIAVE"*/ | |
nome_variabile = sharedPref.getInt("NOME_CHIAVE", 0) |
Vediamo ora queste righe di codice all'interno dell' esempio
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.tutorialsharedpreferences2 | |
import android.content.Context //importazione della Classe: Context | |
import android.content.Intent //importazione della Classe: Intent | |
import android.content.SharedPreferences //importazione della Classe: SharedPreferences | |
import androidx.appcompat.app.AppCompatActivity | |
import android.os.Bundle | |
import android.widget.Button | |
import android.widget.Toast | |
import kotlinx.android.synthetic.main.activity_main.* | |
class MainActivity : AppCompatActivity() { | |
private var radioChecked: Int? = 0 | |
private var bnSecondActivity: Button? = null | |
override fun onCreate(savedInstanceState: Bundle?) { | |
super.onCreate(savedInstanceState) | |
setContentView(R.layout.activity_main) | |
bnSecondActivity = findViewById(R.id.button2) | |
/*recupero della scelta salvata, | |
* questa viene eseguita leggendo una chiave dal nome "PREF_RBN" con valore di default uguale a zero*/ | |
val sharedPref: SharedPreferences = getSharedPreferences("Save Data", Context.MODE_PRIVATE) | |
/*impostazione della variabile radioChecked in base al valore salvato all'interno | |
* della chiave "PREF_RBN"*/ | |
radioChecked = sharedPref.getInt("PREF_RBN", 0) | |
/*chiamata alla funzione che permette di applicare l'impostazione in base al valore della | |
*variabile salvata*/ | |
loadData() | |
} | |
override fun onResume() { | |
super.onResume() | |
radioButton1.setOnClickListener { | |
//impostazione della variabile da salvare | |
radioChecked = 1 | |
//chiamata alla funzione che permette il salvataggio della variabile nelle SharedPreferences | |
storeData() | |
Toast.makeText(this, "Scelta "+ radioChecked + " memorizzata", Toast.LENGTH_LONG).show() | |
} | |
radioButton2.setOnClickListener { | |
//impostazione della variabile da salvare | |
radioChecked = 2 | |
//chiamata alla funzione che permette il salvataggio della variabile nelle SharedPreferences | |
storeData() | |
Toast.makeText(this, "Scelta "+ radioChecked + " memorizzata", Toast.LENGTH_LONG).show() | |
} | |
radioButton3.setOnClickListener { | |
//impostazione della variabile da salvare | |
radioChecked = 3 | |
//chiamata alla funzione che permette il salvataggio della variabile nelle SharedPreferences | |
storeData() | |
Toast.makeText(this, "Scelta "+ radioChecked + " memorizzata", Toast.LENGTH_LONG).show() | |
} | |
radioButton4.setOnClickListener { | |
//impostazione della variabile da salvare | |
radioChecked = 4 | |
//chiamata alla funzione che permette il salvataggio della variabile nelle SharedPreferences | |
storeData() | |
Toast.makeText(this, "Scelta "+ radioChecked + " memorizzata", Toast.LENGTH_LONG).show() | |
} | |
//gestione del click sul pulsante per aprire la seconda Activity | |
bnSecondActivity!!.setOnClickListener { | |
val apriPaginaDue = Intent(this, SecondActivity::class.java) | |
startActivity(apriPaginaDue) | |
} | |
} | |
/*funzione che esegue l'applicazione dell'impostazione in base al valore della | |
* variabile salvata*/ | |
private fun loadData(){ | |
when(radioChecked) | |
{ | |
0 ->{ | |
//inserire qui il codice da eseguire se non è presente alcun valore memorizzato | |
Toast.makeText(this,"Nessuna scelta memorizzata", Toast.LENGTH_LONG).show() | |
} | |
1 ->{ | |
//inserire qui il codice da eseguire se la scelta memorizzata è uguale a 1 | |
radioButton1.isChecked = true | |
Toast.makeText(this, "Scelta "+ radioChecked, Toast.LENGTH_LONG).show() | |
} | |
2 ->{ | |
//inserire qui il codice da eseguire se la scelta memorizzata è uguale a 2 | |
radioButton2.isChecked = true | |
Toast.makeText(this, "Scelta "+ radioChecked, Toast.LENGTH_LONG).show() | |
} | |
3 ->{ | |
//inserire qui il codice da eseguire se la scelta memorizzata è uguale a 3 | |
radioButton3.isChecked = true | |
Toast.makeText(this, "Scelta "+ radioChecked, Toast.LENGTH_LONG).show() | |
} | |
else ->{ | |
//inserire qui il codice da eseguire se la scelta memorizzata è uguale a 4 | |
radioButton4.isChecked = true | |
Toast.makeText(this, "Scelta "+ radioChecked, Toast.LENGTH_LONG).show() | |
} | |
} | |
} | |
/*funzione che esegue il salvataggio della scelta, | |
* questa viene eseguita salvando una chiave dal nome "PREF_RBN" con il valore di radioChecked*/ | |
private fun storeData(){ | |
//dichiarazione di SharedPreferences in modalita privata (tutte le Activity dell'app possono accedervi) | |
val sharedPref: SharedPreferences = getSharedPreferences("Save Data", Context.MODE_PRIVATE) | |
//dichiarazione di voler modificare le SharedPreferences | |
val editor = sharedPref.edit() | |
//modifica della chiave "PREF_RBN" con il valore della variabile radioChecked | |
editor.putInt("PREF_RBN", radioChecked!!.toInt()) | |
//applicazione (salvataggio) delle modifiche | |
editor.apply() | |
} | |
} |
saveData() viene richiamata ogni volta che si clicca su un RadioButton in modo da memorizzare la scelta fatta.
Le righe di codice che permettono la lettura sono state inserite all'interno della funzione onCreate() e subito dopo viene eseguita la funzione loadData per applicare l'impostazione all'interno dell'app; in questo caso la selezione del RadioButton.
Ecco come si presenta il file SecondActivity.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.tutorialsharedpreferences2 | |
import android.content.Context //importazione della Classe: Context | |
import android.content.SharedPreferences //importazione della Classe: SharedPreferences | |
import androidx.appcompat.app.AppCompatActivity | |
import android.os.Bundle | |
import android.widget.Button | |
import android.widget.TextView | |
import kotlinx.android.synthetic.main.activity_second.* | |
class SecondActivity : AppCompatActivity() { | |
private var txtView: TextView? = null | |
private var bnBack: Button? = null | |
private var scelta: Int? = null | |
override fun onCreate(savedInstanceState: Bundle?) { | |
super.onCreate(savedInstanceState) | |
setContentView(R.layout.activity_second) | |
txtView = findViewById(R.id.textView) | |
bnBack = findViewById(R.id.button) | |
/*recupero della scelta salvata, | |
* questa viene eseguita leggendo una chiave dal nome "PREF_RBN" con valore di default uguale a zero*/ | |
val sharedPref: SharedPreferences = getSharedPreferences("Save Data", Context.MODE_PRIVATE) | |
/*impostazione della variabile radioChecked in base al valore salvato all'interno | |
* della chiave "PREF_RBN"*/ | |
scelta = sharedPref.getInt("PREF_RBN", 0) | |
textView.text = "Scelta n° " + scelta | |
bnBack!!.setOnClickListener { | |
finish() | |
} | |
} | |
} |
Ecco un video dimostrativo
Download Project | ![]() |
Download file APK | ![]() |
Commenti
Posta un commento