代码之家  ›  专栏  ›  技术社区  ›  irobotxx

在活动之间使用共享首选项的最佳方法是什么

  •  18
  • irobotxx  · 技术社区  · 15 年前

    我的应用程序中有一个用户偏好,它会被不同的活动使用。我想知道在我的应用程序的不同活动之间利用这些偏好的最佳方法。

    我有一个想法,从主活动创建一个共享的首选项对象,然后从主活动向不同的活动发送意图以采取行动。这样行吗…?

    或者继续打电话 getsharedpreferences() 从每项活动……?

    谢谢。

    3 回复  |  直到 9 年前
        1
  •  25
  •   fornwall    15 年前

    通过意图发送共享偏好似乎过于复杂。您可以使用下面这样的方法包装共享的首选项,并直接从活动中调用方法:

    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();
        }
    }
    
        2
  •  6
  •   krunal shah    15 年前

    您可以这样使用,并在所有要使用的活动中用相同的名称声明相同的变量。

      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();
    

    您必须在要使用共享首选项的活动中声明相同的变量。最好在每个活动中调用getsharedreferences。

    我不认为在意图上通过这种偏好是有效的。

        3
  •  0
  •   William Remacle    15 年前

    当然,您可以在应用程序中使用共享首选项。

    如果您有一个比string或int更简单的类型,那么您可以使用singleton或扩展应用程序类,应用程序的所有活动都可以访问该类。 =>此处没有磁盘访问权限。简单地保存在记忆中。