2010-10-29 82 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更多的簡單類型,你可以使用單例或擴展應用程序類,應用程序的所有活動都可以訪問它。 =>這裏沒有磁盤訪問。只是留在記憶中。

相關問題