2010-10-29 21 views
18

मेरे पास मेरे ऐप में उपयोगकर्ता वरीयता है, जो विभिन्न गतिविधियों द्वारा उपयोग की जाती है। मैं अपनी ऐप में विभिन्न गतिविधियों के बीच उन प्राथमिकताओं का उपयोग करने का सबसे अच्छा तरीका जानना चाहता हूं।गतिविधियों के बीच साझा प्राथमिकताओं का उपयोग करने का सबसे अच्छा तरीका क्या है

मेरे पास मुख्य गतिविधि से साझा वरीयता वस्तु बनाने का विचार है और वहां से कार्यवाही करने के लिए विभिन्न गतिविधियों के इरादे भेजते हैं। क्या इससे काम हो जायेगा...?

या बस हर गतिविधि से getsharedpreferences() पर कॉल करना जारी रखें ..?

धन्यवाद।

उत्तर

23

उद्देश्य के माध्यम से साझा वरीयताओं भेजा जा रहा है overcomplicated लगता है। आप साझा प्राथमिकताओं को नीचे की तरह कुछ के साथ लपेट सकते हैं और सीधे अपनी गतिविधियों से विधियों को कॉल कर सकते हैं:

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

हम्म .. बहुत सारे यहाँ विकल्प। लेकिन वास्तव में मेरे उपयोगकर्ता वरीयता में चेकबॉक्स शामिल हैं जो सूचीदृश्य में कार्रवाई करता है। इसलिए मैं यहां सुझावों के साथ जा सकता हूं। केवल समस्या यह है कि यह एक कस्टम कर्सर एडाप्टर से पॉप्युलेटिंग है, इसलिए 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); 

    } 

प्रारंभ में शब्दकाउंट 4 देगा; और तुम शब्दसंख्या संपादित करें और स्टोर करने के लिए फिर से

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

आप गतिविधियों जहां साझा वरीयताओं का उपयोग करना चाहते में यह एक ही चर घोषित करने के लिए है चाहते हैं। और यह बेहतर है कि आप प्रत्येक गतिविधि में getSharedPreferences को कॉल करें।

मुझे नहीं लगता कि इरादे में वरीयता उत्तीर्ण होगी।

+0

यह मेरे लिए काम करता है और सरल है। –

0

आप निश्चित उपयोग के अपने अनुप्रयोगों में साझा कर सकते हैं वरीयताओं।

यदि आपके पास स्ट्रिंग या इंट की तुलना में एक साधारण प्रकार से अधिक है, तो आप एक सिंगलटन का उपयोग कर सकते हैं या एप्लिकेशन क्लास को बढ़ा सकते हैं जो आपके आवेदन की सभी गतिविधियों से सुलभ होगा। => यहाँ कोई डिस्क का उपयोग। बस स्मृति में रखा गया।

संबंधित मुद्दे

 संबंधित मुद्दे