android - Preference in PreferenceFragment is not getting updated -


मेरे पास एक मुख्य गतिविधि है, जो एक PreferenceFragment (एक्शनबार का एक हिस्सा) लोड करती है।

PreferenceFragment मैं अपनी प्राथमिकताओं को एक XML फ़ाइल से लोड करता हूं:

  @Orride सार्वजनिक शून्य पर क्रिएट (बंडल सहेजा गया इन्स्टैंसस्टेट) {super.onCreate (SavedInstanceState); // एक्सएमएल संसाधन जोड़ने से वरीयताओं को लोड करेंप्रोमरेसोर्स (आर एक्सएमएल। प्राथमिकताएं); }  

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

I विभिन्न समाधानों की खोज की, लेकिन ईमानदार होने के लिए मुझे काम करने का कोई काम नहीं मिला मेरा खुद का विचार निम्न है:

अगर मैं स्विच का स्विच एलिमेंट मिल सकता है तो मेरी समस्या का समाधान हो जाएगा, इसलिए मैं स्विच को स्टार्ट () या फिर रीज्यूम () विधि में सही पर सेट कर सकता हूं। लेकिन स्विच ऑब्जेक्ट प्राप्त करने में कोई बदलाव है? यदि मैं एक सामान्य लेआउट लोड करूँगा तो मैं इस तरह से स्विच का उपयोग कर सकता हूं:

  देखें v = inflater.inflate (R.layout.start_fragment, कंटेनर, गलत); स्विच स्थिति = (स्विच) v.findViewById (R.id.switch1);  

इसके बाद मैं इस तरह की स्विच की स्थिति निर्धारित करने में सक्षम हो जाऊंगा:

  status.setChecked (true);  

एक अन्य समाधान वास्तविक दृश्य को नष्ट करने और addPreferencesFromResource () को कॉल करने के लिए होगा, लेकिन ईमानदारी से मुझे नहीं पता कि यह कैसे किया जा सकता है ....

तीसरा समाधान मेरी पसंद संभ्रांत में एक ऑन-चेक्ड चेंज लिस्टनर का उपयोग करने के लिए हो सकता है, लेकिन फिर से समस्या यह होगी कि स्विच कैसे बदल / अद्यतन किया जाए।

मुझे यकीन है कि वरीयता ठीक से अपडेट की जाती है, क्योंकि मैं चल रहा हूं मेरी सेवाओं में से एक में एक ऑनशेडप्रेशर चेंज लिस्टनर और इस समस्या को डिबग करने के लिए मैंने श्रोता को अपने स्विच पर्मेंस की स्थिति में लॉग ऑन किया है।

क्या आप मेरी मदद कर सकते हैं?


दुर्भाग्य से मैं जवाब नहीं दे सकता कल सुबह से पहले मेरा अपना प्रश्न है, इसलिए मैं अपना प्रश्न संपादित करता हूं:

धन्यवाद, मैं अंतर्निहित गतिविधि को पुनरारंभ नहीं करना चाहता, लेकिन केवल टुकड़ा।

सौभाग्य से मुझे मिल गया इस धागा में कोई सुराग:

मैं वास्तव में स्विचप्रेन्चर का उपयोग कर सकता हूं जो कि सरल है। मेरा समाधान है:

<प्री> निजी स्विचप्रेमान pref_phone_locked; @Create पर सार्वजनिक शून्य को ओवरराइड करें (बंडल सहेजे गए इन्स्टैंसस्टेट) {सुपर.नक्रेट (सहेजे गए इन्स्टेंसस्टेट); // एक्सएमएल संसाधन जोड़ने से वरीयताओं को लोड करेंप्रोमरेसोर्स (आर एक्सएमएल। प्राथमिकताएं); स्थिति = (स्विचप्रेफ्रेंस) ढूंढेंप्रेशेंस ("स्थिति"); } सार्वजनिक शून्य पर स्टार्ट () {सुपर.नस्टार्ट (); साझा किए गए साझा किए गए संदर्भःप्रफ़ = PreferenceManager.getDefaultSharedPreferences (getActivity ()); अगर (sharePref.getBoolean ("स्थिति", गलत)) {status.setChecked (true); } और {status.setChecked (false); }}

इस तरह मैं बस वरीयता को स्विचप्रेन्चर में डालने और प्रत्येक ऑनस्टार्ट () कॉल के बाद इसे संशोधित कर सकता हूं। मुझे लगता है कि यह मेरी समस्या का सबसे अच्छा समाधान है।

उम्मीद है कि यह उत्तर भविष्य में कोई समय बचाएगा =) धन्यवाद आप फिर से लोग!

मुझे यकीन नहीं है कि यह आपके लिए काम करेगा (मुझे एंड्रॉइड का बहुत ही बुनियादी ज्ञान है), लेकिन मैंने इस समाधान को एक समान प्रश्न में पाया और यह बहुत अच्छी तरह से काम करता है मुझे

<पूर्व> निजी शून्य अनुकरण रिफ्रेश () {आशय का इरादा = मिलनसार (); ओवरराइड पेंडिंग ट्रान्सिशन (0, 0); intent.addFlags (Intent.FLAG_ACTIVITY_NO_ANIMATION); समाप्त(); ओवरराइड पेंडिंग ट्रान्सिशन (0, 0); startActivity (आशय); }

असल में यह बीच में एनीमेशन के बिना गतिविधि को नष्ट और पुन: विश्राम करता है।

मिला


Comments