android - onSharedPreferenceChanged not fired if change occurs in separate activity? -


मैंने मेरी मुख्य गतिविधि में onSharedPreferenceChanged कार्यान्वित किया है

अगर मैं मुख्य गतिविधि में प्राथमिकताओं को बदलता हूं, तो मेरा ईवेंट आग लग जाता है।

अगर मैं प्राथमिकताओं को अपनी प्राथमिकताएं स्क्रीन ( प्राथमिकताएं ) के माध्यम से बदलता हूं तो मेरी इवेंट फ़ायरफ़ोन बदल जाती है, तब नहीं होती है (क्योंकि यह एक अलग गतिविधि है और साझा किए गए संदर्भों का अलग संदर्भ है?)

क्या किसी की सिफारिश है कि मुझे इस स्थिति पर काबू पाने के बारे में कैसे जाना चाहिए?

धन्यवाद!

EDIT1: मैंने अपनी वरीयता गतिविधि में ईवेंट हैंडलर को जोड़ने का प्रयास किया लेकिन यह कभी भी आग नहीं लगा। मेरी प्राथमिकता गतिविधि के दौरान तैयार होने के दौरान निम्नलिखित विधि को कहा जाता है। जब मैं मूल्य बदलता हूं, तो यह संदेश प्रिंट नहीं करता ( msg () लॉग डी के लिए एक आवरण है)। <पूर्व> निजी शून्य रजिस्टर चेंज लिस्टनर () {साझा किए गए संदर्भ sp = PreferenceManager.getDefaultSharedPreferences (यह); Sp.registerOnSharedPreferenceChangeListener (नया ऑनशेडप्रेशर चेंज लिस्टनर () {साझा किए गए शेयर पर सार्वजनिक शून्य परिवर्तित (साझा किए गए संदर्भ साझा किए गए संदर्भ, स्ट्रिंग कुंजी) {msg ("***** साझा किए गए प्राथमिकता अपडेट *****"); आशय I = नया आशय (); i.putExtra ("कुंजी", कुंजी); i.setAction ("com.gtosoft.dash.settingschanged"); भेजेंब्रेडकास्ट (i); // TODO: ईवेंट को बंद करें}}); }

ऑन शेरडप्रेरण चेंज लिस्टनर आपके मामले में कचरा एकत्रित हो जाता है अगर आप एक अज्ञात वर्ग का उपयोग करते हैं।

उस समस्या को हल करने के लिए निम्न कोड को PreferenceActivity में रजिस्टर करें और एक बदलाव श्रोता को अनअर्स करने के लिए उपयोग करें:

  सार्वजनिक वर्ग MyActivity प्राथमिकता औजारों को बढ़ाता है OnSharedPreferenceChangeListener {@Override protected void onResume () {super.onResume (); // जब भी कोई कुंजी बदलाव मिले, तो श्रोता सेट अप करें। ()। GetSharedPreferences () .registerOnSharedPreferenceChangeListener (this); } @ ओवरराइड संरक्षित शून्य पर पॉज़ () {सुपर। // जब भी कोई कुंजी बदलाव मिले, तो श्रोता को अनरिंटेड करें। प्रक्षेपण स्क्रीन ()। GetSharedPreferences () .unregisterOnSharedPreferenceChangeListener (this); } सार्वजनिक शून्य पर साझा किए गए संदर्भ में बदल दिया (साझा किए गए साझा किए गए संदर्भ, स्ट्रिंग कुंजी) {// do stuff}  

इसके अलावा यह भी ध्यान रखें कि श्रोता केवल कहलाता है अगर वास्तविक मान में परिवर्तन होता है उसी मान को फिर से सेट करना श्रोता को आग नहीं देगा।

यह भी देखें


Comments