2011-10-09 12 views
7

मैं अपने आवेदन के भीतर सभी Activities पर अपने डेटा को संग्रहीत करने के लिए SharedPreferences का उपयोग कर रहा हूं। मैं इस तरह यह करने के लिए पहुँच जाते हैं:मेरे साझा किए गए संदर्भों से निपटने के लिए वरीयता सक्रियता को कैसे बल देना है?

SharedPreferences mSharedPreferences = getSharedPreferences("MyPrefs", 0); 

मैं क्रियान्वित किया है PreferenceActivity ताकि उपयोगकर्ताओं को इसके माध्यम से मूल्यों को बदल सकते, लेकिन यह इसे पढ़ता/डेटा लिखते हैं होता नहीं है, लेकिन करने के लिए "MyPrefs" करने के लिए:

PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 

जो मेरे लिए थोड़ा अप्रत्याशित है। क्या मेरी "MyPrefs" प्राथमिकताओं से निपटने के लिए PreferenceActivity को मजबूर करना संभव है? और एकल आवेदन के भीतर कई प्राथमिकताओं का क्या मतलब है? धन्यवाद।

+1

इस पढ़ें: http://stackoverflow.com/questions/7045417/android-custom-sharedpreferences-implementation-to-persist-to-database – aromero

उत्तर

0

मैं इस

कि ठीक है जैसे कि यह करने के लिए उपयोग, इतने लंबे समय आप PreferenceActivity का उपयोग कर की योजना नहीं बना रहे थे के रूप में मिलता है।

मैं PreferenceActivity को क्रियान्वित किया है ताकि उपयोगकर्ताओं को यह

उफ़ के माध्यम से मूल्यों को बदल सकते हैं।

इसके अलावा, getApplicationContext() से छुटकारा पाएं, जब तक कि आपके पास गतिविधि/सेवा/जो कुछ भी हो, Application का उपयोग करने का कोई विशिष्ट कारण न हो। केवल Application ऑब्जेक्ट का उपयोग करें जब आपको पता होना चाहिए और आपको पता है कि आपको क्यों करना है।

क्या मेरी "MyPrefs" प्राथमिकताओं से निपटने के लिए वरीयता सक्रियता को बल देना संभव है?

आसानी से नहीं। जब तक आपके पास अपनी SharedPreferences फ़ाइल का आविष्कार करने का कोई विशिष्ट कारण न हो, तो मैं डिफ़ॉल्ट का उपयोग करूंगा।

और एकल एप्लिकेशन के भीतर कई प्राथमिकताओं का क्या मतलब है?

तुम एक पुन: प्रयोज्य पुस्तकालय या घटक SharedPreferences में सामान स्टोर करना चाहते हो सकता है, और कहा कि ऐसा नहीं के रूप में गंदगी की मेजबानी आवेदन से किसी भी प्राथमिकताओं के लिए अपने स्वयं के फ़ाइल हो सकता है। कहा जा रहा है कि, कई वरीयता फ़ाइलों को आम तौर पर आवश्यक नहीं है।

+11

'PreferenceActivity' के' getPreferenceManager() .setSharedPreferencesName() 'चाल है – xverges

4

मैं वरीयता प्रबंधक का उपयोग करने की सिफारिश करता हूं .getDefaultSharedPreferences (संदर्भ) हर जगह, वरीयता गतिविधि का उपयोग करने के समान ही है। लेकिन अगर आपको अपने वर्तमान सेटअप के साथ चिपकने की ज़रूरत है तो एक हैकी समाधान (लेकिन केवल मुझे पता है) पाने के लिए getSharedPreferences को ओवरराइड करना है जो आप चाहते हैं।

@Override 
public SharedPreferences getSharedPreferences(String name, int mode) { 
    return super.getSharedPreferences("MyPrefs", mode); 
} 
14

यह संभव और सरल है। यह मेरे लिए काम किया

public class SettingsActivity extends PreferenceActivity { 
    @SuppressWarnings("deprecation") 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     getPreferenceManager().setSharedPreferencesName("MyPrefs"); 
     //getPreferenceManager().setSharedPreferencesMode(MODE_WORLD_WRITEABLE); 
    addPreferencesFromResource(R.xml.preferences); 
    } 
} 
+0

मेरे लिए भी काम किया ... धन्यवाद! – aap

+0

यह सही जवाब है।यह तकनीक भी काम करती है यदि आप 'वरीयता फ़्रेगमेंट' –

+0

का उपयोग कर रहे हैं तो यह स्वीकार्य उत्तर होना चाहिए। – Jay

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