¿Dónde almacenar las claves de preferencias de Android?

Cuando creo actividad de preferencia, defino todas las preferencias en el archivo xml. Cada preferencia tiene una clave definida en este xml. Pero cuando accedo a las preferencias escribo:

SharedPreferences appPreferences = PreferenceManager.getDefaultSharedPreferences(this); boolean foo_value = appPreferences.getBoolean("foo_key_defined_in_xml", false); 

¿Hay alguna forma de evitar la referencia a "foo_key_defined_in_xml" de forma codificada? Tal vez hay una posibilidad de hacer referencia a ella en forma de estilo R (no se refieren a la cadena)?

He descubierto que es posible almacenar claves en strings.xml y hacer referencia a ellas desde preferences.xml como todos los demás valores android:key="@string/preference_enable" .

En código puede hacer referencia a la clave escribiendo getString(R.string.preference_enable)

Puede marcar la cadena para no ser traducida usando una <xliff:g> . Ver lista de verificación de localización

 <string name="preference_enable"><xliff:g id="preference_key">enable</xliff:g></string> 

Prueba getString(R.string.key_defined_in_xml) .

¿Qué pasa con el uso de una clase de ayuda 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); } } 

Usted podría utilizar un "keys.xml" archivos en "res / valores", pero debe poner algo como esto, de esta manera usted no debe tener problema cuando se utilizan varios idiomas:

  <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> <string name="key1">key1</string> <string name="key2">key2</string> ... </resources> 

Entonces usted podría referenciarlo como una cadena normal en xml:

 .... android:key="@string/key1" .... 

O en su código java por ejemplo:

 SwitchPreference Pref1= (SwitchPreference) getPreferenceScreen().findPreference(getString(R.string.key1)); 

Por lo que sé, no hay mejor manera de hacer referencia a las claves de preferencia (aparte de tal vez usar una cadena final estática para almacenar la cadena en la clase).

El ejemplo dado en el SDK hace lo mismo que lo que has dado en tu ejemplo,

  • SDK de Android: Análisis de JSON de la URL mediante GSON
  • No se puede encontrar la clase de actividad explícita {}; Has declarado esta actividad en tu AndroidManifest.xml
  • Analizar objeto JSON con cadena y sólo valor
  • Almacenamiento de clave secreta en KeyStore sin el parámetro ProtectionParameter
  • La mejor manera de unir tablas usando sqlite en android
  • Manera correcta de manejar la barra de acción hasta el botón?
  • Creación de una base de datos de aplicaciones para Android con gran cantidad de datos
  • Cómo analizar el formato de fecha "dd-MM" para obtener el año actual? "
  • No se pudo encontrar la clase referenciada desde el método android java.lang.NoClassDefFoundError
  • Android - Cambiar el tema de la aplicación en onClick
  • Creación de un android.graphics.Bitmap desde C ++
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.