Как заставить PreferenceActivity работать с моими SharedPreferences? - PullRequest
7 голосов
/ 09 октября 2011

Я использую SharedPreferences для хранения своих данных по всем Activities в моем приложении. Я получаю к нему доступ так:

SharedPreferences mSharedPreferences = getSharedPreferences("MyPrefs", 0);

Я реализовал PreferenceActivity, чтобы пользователи могли изменять значения через него, но бывает, что он читает / записывает данные не в «MyPrefs», а в:

PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

Что немного неожиданно для меня. Можно ли заставить PreferenceActivity справиться с моими предпочтениями «MyPrefs»? И какой смысл иметь несколько предпочтений в одном приложении? Спасибо.

Ответы [ 3 ]

14 голосов
/ 08 октября 2012

Это возможно и просто. Это сработало для меня

public class SettingsActivity extends PreferenceActivity {
    @SuppressWarnings("deprecation")
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getPreferenceManager().setSharedPreferencesName("MyPrefs");
        //getPreferenceManager().setSharedPreferencesMode(MODE_WORLD_WRITEABLE);
    addPreferencesFromResource(R.xml.preferences);
    }
}
5 голосов
/ 10 октября 2011

Я бы рекомендовал просто использовать PreferenceManager.getDefaultSharedPreferences (context) везде, что совпадает с тем, что использует действие предпочтений. Но если вам нужно придерживаться текущей настройки, то хакерское решение (но единственное, о котором я знаю) - переопределить getSharedPreferences, чтобы вернуть то, что вы хотите.

@Override
public SharedPreferences getSharedPreferences(String name, int mode) {
    return super.getSharedPreferences("MyPrefs", mode);
}
0 голосов
/ 10 октября 2011

Я получаю к нему доступ вот так

Это прекрасно, если вы не планируете использовать PreferenceActivity.

I 'мы реализовали PreferenceActivity, чтобы пользователи могли изменять значения через него

Упс.

Кроме того, избавьтесь от getApplicationContext() там, если у вас нет особой причины для использования Applicationчем деятельность / услуга / что угодно.Используйте объект Application только тогда, когда это необходимо, и вы знаете, почему это необходимо.

Возможно ли заставить PreferenceActivity работать с моими настройками "MyPrefs"?

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

И какой смысл иметь несколько предпочтений в одном приложении?

Возможно, у вас есть библиотека или компонент многократного использования, которые вы хотите хранить вещи в SharedPreferences, и у них может быть свой собственный файл, чтобы не испортить какие-либо настройки из приложения хостинга.При этом несколько файлов предпочтений обычно не нужны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...