Domanda

Quando creo l'attività delle preferenze, definisco tutte le preferenze nel file xml.Ogni preferenza ha una chiave definita in questo xml.Ma quando accedo alle preferenze scrivo:

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

Esiste un modo per evitare di fare riferimento a "foo_key_fine_in_xml" in modo hardcoded?Forse c'è la possibilità di farvi riferimento in stile R (non fare riferimento alla stringa)?

È stato utile?

Soluzione

Ho scoperto che è possibile conservare le chiavi stringhe.xml e fare riferimento a loro da preferenze.xml proprio come tutti gli altri valori android:key="@string/preference_enable".

Nel codice puoi fare riferimento alla chiave digitando getString(R.string.preference_enable)

Puoi contrassegnare la stringa da non tradurre utilizzando a <xliff:g> etichetta.Vedere Lista di controllo della localizzazione

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

Altri suggerimenti

È possibile utilizzare un file "keys.xml" nella "res / valori", ma dovrebbe mettere qualcosa di simile, in questo modo si dovrebbe non avete problema quando si utilizzano più lingue:

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

    <string name="key1">key1</string>
    <string name="key2">key2</string>
...
</resources>

Poi si potrebbe fare riferimento a esso come un filo normale in xml:

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

o nel codice java per esempio:

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

Prova getString(R.string.key_defined_in_xml).

Per quanto ne so non c'è modo migliore di riferimento chiavi di preferenza (a parte forse utilizzando una stringa finale statica per memorizzare la stringa sulla classe).

Il esempio dato nella documentazione SDK fa lo stesso di quello che hai dato nel tuo esempio,

Cosa succede ad usare una classe di supporto per nascondere la getString () - un'istanza della aiutante una volta in ogni attività o servizio. Ad esempio:

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);
    }
}

Nel strings.xml contrassegnare la chiave come intraducibile:

<string name="screw_spacing_key" translatable="false">Screw spacing</string>
<string name="screw_spacing_title">Screw spacing</string>
<string name="screw_spacing_summary">Set screw spacing</string>

Utilizzo:

<EditTextPreference
    android:key="@string/screw_spacing_key"
    android:title="@string/screw_spacing_title"
    android:summary="@string/screw_spacing_summary"/>

See: Configurare le righe intraducibili

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top