Если настройки являются глобальными для приложения, вы можете использовать PreferenceManager.getDefaultSharedPreferences();
, когда вам нужно получить доступ к общим настройкам. Если настройки относятся к подмножеству Activities
, у вас есть несколько различных вариантов:
Вы можете создать подкласс Activity
, который будет расширен всеми классами, которым требуется доступ к предпочтениям:
public abstract class AbstractFooActivity extends Activity
{
protected SharedPreferences getFooPreferences()
{
return getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
}
private static final String PREFS_NAME = "FooPrefs";
}
public class AFooActivity extends AbstractFooActivity
{
public void aMethodThatNeedsPrefs()
{
// ...
SharedPreferences myPrefs = getFooPreferences();
}
}
Или, если вы, как и я, не хотите связываться с иерархией классов, вы можете просто создать общее постоянное значение для группы действий, которым требуется доступ к предпочтениям. Это полезно в ситуации, когда у вас есть класс вне иерархии Activity
, который должен получить доступ к предпочтениям. Например, Service
.
public final class FooConstants
{
public static final String FOO_PREFS_NAME = "FooPrefs";
}
public class AFooActivity extends Activity
{
public void aMethodThatNeedsPrefs()
{
// ...
SharedPreferences myPrefs = getSharedPreferences(FOO_PREFS_NAME, MODE_PRIVATE);
}
}
public class AFooService extends Service
{
public void aMethodThatNeedsPrefs()
{
// ...
SharedPreferences myPrefs = getSharedPreferences(FOO_PREFS_NAME, MODE_PRIVATE);
}
}
Второй метод немного менее инкапсулирован, но налагает меньше ограничений на иерархию объектов, что, на мой взгляд, является хорошим компромиссом.