2011-05-17 12 views
9

Im utilizando Androids built in way de las preferencias de manejo que funciona escribiendo todas las configuraciones en un archivo xml. Es muy bueno, pero no puedo encontrar una buena manera de hacerlo sin usar cadenas mágicas en el código xml y Java.Manejando las preferencias de Android sin cadenas mágicas

La única forma en que podría pensar es guardar la clave de preferencia como Cadena, pero eso tampoco se siente bien. ¿Alguien tiene una buena manera de resolver esto?

+0

¿Cuál es la pregunta? ¿Por qué no quieres usar la pantalla Preferencia? – Jim

+0

Perdón por no estar claro; Quiero usar la pantalla de preferencias, pero no quiero usar cadenas mágicas en mi código. Así que estaba buscando una forma de almacenar las claves en xml. –

Respuesta

17

Puede mover su "cadena mágica" a los recursos de cadena:

en usted archivo XML preferencia:

<EditTextPreference 
     android:key="@string/preferences_pdn_key" 
     android:title="@string/preferences_pdn_title" 
     android:summary="@string/preferences_pdn_summary" 
     android:dialogMessage="@string/input_pdn_message" /> 

En sus values/strings.xml archivos:

... 
<string name="preferences_pdn_key">pdn</string> 
... 

A continuación, puede hacer referencia a la preferencia desde su Activity o PreferenceActivity:

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); 
String pdnKey = getString(R.string.prefernece_pdn_key); 
String pdn = sharedPreferences.getString(pdnKey, null); 

Si no le gusta a buscar las claves de preferencias de recursos de cadena todo el tiempo que puede hacer otro truco:

public class PreferenceNames { 

    /* categories */ 
    public static final String LoginCategory = MyApplication.getResourceString(R.string.preferences_login_category_key); 
    ... 

    /* preferences */ 
    public static final String Pdn = MyApplication.getResourceString(R.string.preferences_pdn_key); 
    ... 
} 

Así que usted puede ahora hacer referencia a la preferencia manera siguiente clave:

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); 
String pdn = sharedPreferences.getString(PreferenceNames.Pdn, null); 

Y aquí es cómo su clase MyApplication debe verse como:

public class MyApplication extends Application {  
    private static VvmApplication s_instance; 

    public MyApplication(){ 
     s_instance = this; 
    } 

    public static Context getContext(){ 
     return s_instance; 
    } 

    public static String getResourceString(int resId){ 
     return getContext().getString(resId);  
    } 
} 

Plus es necesario agregar lo siguiente que a su AndroidManifest.xml:

<application android:name="com.mypackage.application.MyApplication" ... > 
... 
</application> 
+0

Gracias. Hubiera sido bueno evitar el string-xml para evitar problemas durante la traducción, pero ese es un problema manejable. –

+0

¿Puede decirme cuáles son las cadenas mágicas que no escuché antes? P – ingsaurabh

+0

Es cuando escribe cadenas directamente en el código. En la mayoría de los ejemplos que he visto para la pantalla de preferencias, han escrito "settingKey" en los códigos xml y java. No quiero depender de tener que escribir el nombre correcto cada vez, así que quiero hacer referencia a la misma cadena tanto de xml como de java. –

Cuestiones relacionadas