2010-10-29 2 views
18

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

У меня возникла идея создать общий объект предпочтения из основного вида деятельности и оттуда отправлять намерения различным действиям для принятия действий. Будет ли это работать ...?

Или просто продолжайте звонить getsharedpreferences() из всех видов деятельности ..?

Спасибо.

ответ

23

Отправка общих настроек посредством намерений представляется сложнее. Вы можете обернуть общие настройки следующим образом и вызвать методы непосредственно из ваших действий:

public class Prefs { 
    private static String MY_STRING_PREF = "mystringpref"; 
    private static String MY_INT_PREF = "myintpref"; 

    private static SharedPreferences getPrefs(Context context) { 
     return context.getSharedPreferences("myprefs", 0); 
    } 

    public static String getMyStringPref(Context context) { 
     return getPrefs(context).getString(MY_STRING_PREF, "default"); 
    } 

    public static int getMyIntPref(Context context) { 
     return getPrefs(context).getInt(MY_INT_PREF, 42); 
    } 

    public static void setMyStringPref(Context context, String value) { 
     // perform validation etc.. 
     getPrefs(context).edit().putString(MY_STRING_PREF, value).commit(); 
    } 

    public static void setMyIntPref(Context context, int value) { 
     // perform validation etc.. 
     getPrefs(context).edit().putInt(MY_INT_PREF, value).commit(); 
    } 
} 
+0

hmm .. слишком много выбор здесь. но на самом деле мои предпочтения пользователя содержат флажки, которые выполняют действия в списке. поэтому я могу пойти с предложениями здесь. только проблема заключается в том, что он заселен из customCursorAdapter, поэтому jjst выясняет, где его называть – irobotxxx

+1

да .. это работает, действительно застрелило бы меня в ногу, если бы я прошел маршрут намерения! – irobotxxx

+0

Вы столкнулись с проблемой производительности, используя этот подход? потому что я использую тот же подход, и у меня проблема с производительностью, но не уверен, что этот подход является причиной проблемы. – AlAsiri

6

Вы можете использовать этот способ и объявлять одинаковые переменные с одинаковым именем во всех действиях, в которых вы хотите использовать.

public static final String PREFS_NAME = "MyPrefsFile"; 
    static SharedPreferences settings; 
    SharedPreferences.Editor editor; 
    int wordCount; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    settings = getSharedPreferences(PREFS_NAME, 0); 
    editor = settings.edit(); 

    wordCount = settings.getInt("wordCount", 4); 

    } 

Здесь первоначально wordCount даст 4; И при редактировании WordCount и хотите хранить снова

editor.putInt("wordCount", 6); 
    editor.commit(); 

Вы должны объявить эти же переменные в деятельности, где вы хотите использовать общие предпочтения. И чем лучше вы называете getSharedPreferences в каждом действии.

Я не думаю, что принятие этого предпочтения в намерении будет работать.

+0

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

0

Вы можете, конечно, использовать общие настройки в своих приложениях.

Если у вас более простой тип, чем строка или int, вы можете использовать singleton или расширять класс приложения, который будет доступен для всех действий вашего приложения. => Нет доступа к диску здесь. Просто хранится в памяти.

Смежные вопросы