Подтвердить что ты не робот

Где хранить ключи предпочтений Android?

Когда я создаю активность предпочтений, я определяю все настройки в файле xml. Каждое предпочтение имеет ключ, определенный в этом xml. Но когда я получаю доступ к предпочтению, пишу:

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

Есть ли способ избежать ссылки "foo_key_defined_in_xml" жестко закодированным образом? Возможно, есть возможность ссылаться на него в стиле R (не ссылаться на строку)?

4b9b3361

Ответ 1

Я обнаружил, что можно хранить ключи в strings.xml и ссылаться на них из preferences.xml, как и все остальные значения android:key="@string/preference_enable".

В коде вы можете обратиться к клавише, набрав getString(R.string.preference_enable)

Вы можете пометить строку, которая не должна быть переведена с помощью тега <xliff:g>. См. Контрольный список локализации

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

Ответ 2

Вы можете использовать файлы "keys.xml" в "res/values", но должны помещать что-то вроде этого, таким образом вы не должны иметь проблемы при использовании нескольких языков:

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

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

Затем вы можете ссылаться на него как обычную строку в xml:

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

или в вашем java-коде, например:

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

Ответ 3

Попробуйте getString(R.string.key_defined_in_xml).

Ответ 4

Как использовать хелпер-класс, чтобы скрыть getString() - создать экземпляр помощника один раз в каждом действии или службе. Например:

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

Ответ 5

Насколько я знаю, нет лучшего способа ссылки на ключи предпочтений (помимо использования статической финальной строки для хранения строки в классе).

пример, указанный в документах SDK, делает то же, что и в вашем примере,