Android: обновление отображаемых настроек из SharedPreferences - PullRequest
2 голосов
/ 13 февраля 2012

Я пишу приложение для Android с параметром PreferencesActivity, в котором выборки, сделанные в моем экземпляре PreferencesActivity, влияют на значения других отображаемых элементов настроек.Несмотря на то, что я могу изменять значения базовых элементов SharedPreferences пограмматически, эти измененные значения не отражаются в отображаемых элементах списка до тех пор, пока я не выйду из настройки предпочтений и не перезагрузлю его.Ниже приведена урезанная версия моего класса настроек и XML-файла, которые иллюстрируют проблему.Если пользователь установит значение Guitar в качестве значения для предпочтения с помощью key toolList, я бы хотел, чтобы предпочтение с помощью ключа tuningChoice вернулось к стандартному.

Я могу снова вызвать addPreferencesFromResource в моем методе onSharedPreferenceChanged, который загружает дубликат всех элементов предпочтений, отображаемых под старыми элементами, с правильными значениями.Если бы я мог найти какой-то способ отменить начальный addPreferencesFromResource, вызываемый во время onCreate, я думаю, я бы установил.

Любая помощь будет оценена, спасибо

Ответы [ 4 ]

1 голос
/ 13 февраля 2012

Я делаю что-то вроде этого ... надеюсь, это поможет:

    ListPreference list = (ListPreference) getPreferenceManager().findPreference("myList");
    list.setValue(sharedPrefs.getString("myList", "default"));
    list.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {

        public boolean onPreferenceChange(Preference preference, Object newValue) {
            sharedPrefs.put("myList", newValue.toString());
            return true;
        }

    });
0 голосов
/ 21 ноября 2018

Может быть, я слишком поздно для ответа на это. Но я надеюсь, что это может помочь новичку, как я.

PackageInfo packageInfo = null;
try {
    packageInfo = preference.getContext().getPackageManager().getPackageInfo(preference.getContext().getPackageName(), 0);
} catch (PackageManager.NameNotFoundException e) {
    e.printStackTrace();   

}
preference.setSummary(packageInfo.versionName);
0 голосов
/ 11 апреля 2012

Если кто-нибудь придет к этой проблеме, вот решение:

ListView list = preferenceActivity.getListView();
list.performItemClick(list, 1, list.getItemIdAtPosition(1));
0 голосов
/ 13 февраля 2012

Вам нужно запретить запуск addPReferencesFromResource дважды? Это загрузка ваших значений по умолчанию? Если это так, добавьте дополнительную SharedPreference с именем DEFAULTS_LOADED и прочитайте ее значение при создании, например: (WARNING PSUEDO CODE):

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    SharedPreferences app_preferences = PreferenceManager.getDefaultSharedPreferences(this);

    boolean loadDefaults = app_preferences.getBoolean(DEFAULTS_LOADED, true);
    if(loadDefaults)
    {  
        addPreferencesFromResource(R.xml.preferences);
        Editor editor = app_preferences.edit();
        editor.putBoolean(DEFAULTS_LOADED, true);
        editor.commit();
    } 
    app_preferences.registerOnSharedPreferenceChangeListener(this);
}

Это предотвратит запись по умолчанию в общие настройки при каждом запуске вашей деятельности. Я предполагаю, что это по крайней мере часть вашей проблемы.

...