android वरीयता-प्रबंधन-getPreferenceManager() और getPreferenceScreen() के बीच अंतर?




android-preferences android-sharedpreferences (3)

पहले वाले को प्राथमिकता से साझा प्राथमिकताएँ मिलती हैं। दूसरी स्क्रीन, वरीयतास्क्रीन से, जो Preference वर्ग से इस पद्धति को प्राप्त करती है।

मुझे लगता है कि यह एक कार्यात्मक अंतर नहीं है, क्योंकि दोनों संभवतया समान SharedPreferences ऑब्जेक्ट्स का एक ही उदाहरण है, लेकिन मुझे लगता है कि यह पहले एक का उपयोग करने के लिए स्पष्ट है ( SharedPreferences बजाय PreferenceManager SharedPreferences का उपयोग करना)।

मैंने अपना खुद का प्राथमिकताग्रंथ उपवर्ग ( here विस्तृत) लागू किया है, और इसके भीतर वरीयता परिवर्तन के लिए सुनना चाहता हूं। CapsFragment आपको ऐसा करने के दो तरीके प्रदान करता है:

getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);

तथा

getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);

किसका उपयोग करना चाहिए? क्या फर्क पड़ता है? मैं वास्तव में Android डॉक्स में किए गए भेद को नहीं समझता।


वरीयतास्क्रीन here प्रभुत्व देखें

वरीयतास्क्रीन वर्ग दो स्थानों पर दिखाई दे सकता है:

  • जब एक प्राथमिकता यह इंगित करती है, तो इसका उपयोग रूट के रूप में किया जाता है और इसे दिखाया नहीं जाता है (केवल निहित प्राथमिकताएं दिखाई जाती हैं)।
  • जब यह किसी अन्य वरीयता पदानुक्रम के अंदर दिखाई देता है, तो इसे दिखाया जाता है और वरीयताओं की एक और स्क्रीन के लिए प्रवेश द्वार के रूप में कार्य करता है (या तो डायलॉग के रूप में वरीयताओं की एक और स्क्रीन दिखा कर या गेटअनेंट () से प्रारंभता (android.content.Intent) के माध्यम से)। इस वरीयतास्क्रीन के बच्चों को स्क्रीन में नहीं दिखाया गया है कि यह वरीयतास्क्रीन में दिखाया गया है। इसके बजाय, इस वरीयता को क्लिक करने पर एक अलग स्क्रीन दिखाई जाएगी।

प्राथमिकता प्रबंधक here देखें:

अंतर :

getPreferenceManager () खंड से संबद्ध वर्तमान वरीयता प्रबंधक देता है।

getPreferenceScreen () यानी रूट वरीयता स्क्रीन को वरीयता में उपयोग किया जाता है, जो वरीयता प्राप्त xml फ़ाइल (वरीयताएँ। xml) से आता है।


मुख्य अंतर उनके नाम में है, PreferenceManger SharedPreferences अलग-अलग कार्यात्मकताओं के लिए SharedPreferences के प्रबंधन के लिए डेवलपर तक पहुँच प्राप्त करते हैं, जैसे कि वर्तमान वरीयता मानों के मानचित्र को पुनर्प्राप्त करना या उपयोगकर्ता प्राथमिकताएँ सेट करना। उनके डिफ़ॉल्ट मूल्यों के लिए। PreferenceScreen स्क्रीन हैंडल उपयोगकर्ता वरीयताओं की एक स्क्रीन प्रदर्शित करता है, ताकि उपयोगकर्ता उन्हें मान असाइन कर सके। कभी-कभी इसका मतलब स्क्रीन पर अन्य वरीयताओं के साथ एक सूची आइटम प्रदर्शित करना है, जो क्लिक किए जाने पर अधिक वरीयताओं के साथ एक और स्क्रीन खोलता है, जैसा कि PreferenceScreen जब वरीयतास्क्रीन नेस्टेड होते हैं।

आपके प्रश्न का तात्पर्य है कि आपको लगता है कि PreferenceManager.getSharedPreferences() क्या है के बीच एक अंतर है।

PreferenceScreen :

public SharedPreferences getSharedPreferences() {
     if (mPreferenceManager == null) {
         return null;
     }

     return mPreferenceManager.getSharedPreferences();
 }

तो SharedPreference और SharedPreference अलग-अलग निकाय हैं, लेकिन SharedPreference विधि उन रिटर्न को एक ही वस्तु होनी चाहिए, क्योंकि SharedPreference PreferenceScreen से विधि कहती है। मुझे आशा है कि वह उत्तर है जो आप मांग रहे हैं।

यदि आपके पास कोई विकल्प है, तो PreferenceManager.getSharedPreferences() साथ जाने के लिए PreferenceManager.getSharedPreferences() । यह अधिक स्पष्ट है और एक कम विधि कॉल आंतरिक है।

मजेदार तथ्य:

PreferenceFragment :

public PreferenceManager getPreferenceManager() {
    return mPreferenceManager;
}

public PreferenceScreen getPreferenceScreen() {
    return mPreferenceManager.getPreferenceScreen();
}




android-sharedpreferences