2010-10-29 83 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

嗯..这里的选择太多了。但实际上我的用户首选项包含在列表视图中执行操作的复选框。所以我可能会在这里提出建议。唯一的问题是,它从一个customCursorAdapter填充,所以jjst找出它在哪里叫它 – irobotxxx 2010-10-29 13:15:56

+1

是的..它的工作原理,如果我经历了意图的路线,真的会在脚下开枪! – irobotxxx 2010-10-29 14:28:24

+0

您是否遇到过使用此方法的性能问题?因为我使用的是相同的方法,而且我有性能问题,但不知道这种方法是否是问题的原因 – AlAsiri 2013-01-06 23:13:56

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

这对我来说很简单。 – 2012-10-07 02:36:04

0

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

如果你有比string或int更多的简单类型,你可以使用单例或扩展应用程序类,应用程序的所有活动都可以访问它。 =>这里没有磁盘访问。只是留在记忆中。

相关问题