java - studio - Dónde almacenar claves de preferencia de Android?
sharedpreferences android studio ejemplo (5)
Cuando creo actividad de preferencia, defino todas las preferencias en el archivo xml. Cada preferencia tiene una clave definida en este xml. Pero cuando tengo acceso a las preferencias escribo:
SharedPreferences appPreferences = PreferenceManager.getDefaultSharedPreferences(this);
boolean foo_value = appPreferences.getBoolean("foo_key_defined_in_xml", false);
¿Hay alguna manera de evitar hacer referencia a "foo_key_defined_in_xml" en forma codificada? ¿Tal vez hay una posibilidad de referenciarlo en forma de R (no para referirse a la cadena)?
¿Qué pasa con el uso de una clase auxiliar para ocultar el getString () - instanciar el ayudante una vez en cada actividad o servicio. Por ejemplo:
class Pref {
final String smsEnable_pref;
final String interval_pref;
final String sendTo_pref;
final String customTemplate_pref;
final String webUrl_pref;
Pref(Resources res) {
smsEnable_pref = res.getString(R.string.smsEnable_pref);
interval_pref = res.getString(R.string.interval_pref);
sendTo_pref = res.getString(R.string.sendTo_pref);
customTemplate_pref = res.getString(R.string.customTemplate_pref);
webUrl_pref = res.getString(R.string.webUrl_pref);
}
}
Descubrí que es posible almacenar claves en strings.xml y referirme a ellas desde preferences.xml como todos los demás valores android:key="@string/preference_enable"
.
En el código, puede consultar la clave escribiendo getString(R.string.preference_enable)
Puede marcar la cadena para que no se traduzca con una <xliff:g>
. Ver lista de verificación de localización
<string name="preference_enable"><xliff:g id="preference_key">enable</xliff:g></string>
Por lo que yo sé, no hay mejor forma de referenciar las claves de preferencia (aparte de usar una cadena final estática para almacenar la cadena en la clase).
El example dado en los documentos SDK hace lo mismo que lo que has dado en tu ejemplo,
Pruebe getString(R.string.key_defined_in_xml)
.
Puede usar un archivo "keys.xml" en "res / values", pero debe poner algo como esto, de esta manera no debería tener problemas cuando usa múltiples idiomas:
<resources
xmlns:tools="http://schemas.android.com/tools"
tools:ignore="MissingTranslation">
<string name="key1">key1</string>
<string name="key2">key2</string>
...
</resources>
Entonces podrías referenciarlo como una cadena normal en xml:
....
android:key="@string/key1"
....
o en tu código java por ejemplo:
SwitchPreference Pref1= (SwitchPreference) getPreferenceScreen().findPreference(getString(R.string.key1));