Aggiornamento del valore della casella di controllo nella schermata delle preferenze al momento della modifica del valore in preferenze condivise in Android
-
28-10-2019 - |
Domanda
Ho un'app che utilizza la posizione dell'utente. Ho una finestra di dialogo (foto sotto) che chiede l'autorizzazione dell'utente per "consentire" o "non consentire" l'app per utilizzare la posizione dell'utente (la finestra di dialogo si aprirà la prima volta che gli utenti apre l'app dopo l'installazione o quando l'utente cerca di utilizzare il servizio basato sulla posizione mentre L'utilizzo della posizione dell'utente è "non consentito" dall'utente).
Uso anche l'elemento preferenza (una casella di controllo) (foto sotto) in PreferenceActivity
dove l'utente può attivare le sue preferenze.
Per modificare il valore della preferenza condivisa, ho utilizzato questo codice
public void onClick(DialogInterface dialog, int id)
{
sharedPrefs =getSharedPreferences("prefs",MODE_WORLD_WRITEABLE);
Editor editor = sharedPrefs.edit();
editor.putBoolean("locationPermission", true);
editor.commit();
}
Mi aspettavo che il valore della casella di controllo cambiasse automaticamente a seconda della selezione della finestra di dialogo in quanto la chiave "locationpermission" contiene il valore alla casella di controllo. Ma non è così.
Ora come posso mappare la finestra di dialogo (foto 1) Selezione al valore della casella di controllo (foto 2)?
Soluzione
Il problema è stato risolto utilizzando
sharedPrefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
invece di
sharedPrefs = getSharedPreferences("prefs", MODE_WORLD_WRITEABLE);
Altri suggerimenti
Puoi chiamare addPreferencesFromResource
nel onCreate
del tuo PreferenceActivity
in modo che la tua interfaccia utente sia popolata dalle preferenze. Inoltre, potresti voler assicurarti che il tuo CheckBoxPreference
ha android:persistent-"true"
Nella sua definizione XML.