Где хранить ключи предпочтений 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 (не ссылаться на строку)?
Ответы
Ответ 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, делает то же, что и в вашем примере,