8

मेरी ऐप्लिकेशन में, कुछ सेटिंग्स संभवतः जबकि PreferenceActivity खुला नहीं है बदला जा सकता है और एक मुद्दा मैं में चल रहा हूँ कि addPreferencesFromResourceonCreate में कहा जाता है, इसलिए कहते हैं, मैं PreferenceActivity खोलते हैं, फिर वहां से दूसरी स्क्रीन पर जाएं, फिर कुछ ऐसा करें जो सेटिंग्स को बदलता है, फिर PreferenceActivity पर वापस जाने के लिए बैक कुंजी दबाएं, फिर लेआउट पर कुछ सेटिंग्स नहीं बदली हैं।पुनः लोड पसंद

तो, मैं लेआउट को डुप्लिकेट किए बिना हर Preferences हर बार onResume (या onStart()) को फिर से लोड कैसे कर सकता हूं?

उत्तर

3

संपादित करें: यह समाधान केवल API 11 + के लिए काम करेगा।

मुझे यकीन नहीं है कि मैं आपकी समस्या को पूरी तरह से समझता हूं, लेकिन आप उस गतिविधि के पुनरुत्थान() को फिर से बनाने के लिए एक कॉल जोड़ सकते हैं, जो मेरी समझ से गतिविधि को पूरे जीवन चक्र से फिर से चलाती है।

यह सुनिश्चित करने के लिए कि आप वास्तव में ऐसा करते हैं जब वास्तव में गंदे डेटा होते हैं, तो मैं साझा किए गए संदर्भों में एक ध्वज सेट करता हूं जो आपकी गतिविधि को ऑनस्यूम() में जानने देता है जिसे इसे पुनर्निर्मित करने की आवश्यकता होती है।

public void onResume(){ 
      super.onResume(); 
      SharedPreferences pref = getApplicationContext().getSharedPreferences(Constants.PREFS_NAME, Context.MODE_PRIVATE); 
      if(pref.getBoolean("isDirtyPrefs", true)) 
       recreate(); 
     } 
+0

धन्यवाद। मैंने अभी तक इसका परीक्षण नहीं किया है, लेकिन ऐसा लगता है कि यह काम करेगा। मुझे recreate() कमांड के बारे में पता नहीं था जिसे मैं वरीयता एक्टिविटी और वरीयता प्रबंधक में देख रहा था। लेकिन धन्यवाद, जैसा कि मैं वही चाहता था। – Jakar

+4

पुन: प्रयास करें एपीआई एलवीएल 11 – Blundell

+0

मैं अनुशंसा करता हूं कि आप तर्क का परीक्षण करें क्योंकि यह लूप चालू हो सकता है क्योंकि रेज़्यूम जीवन चक्र प्रक्रिया में बुलाया जाएगा और यदि डेवलपर वरीयता निर्धारित नहीं करता है या नहीं, तो इससे सही और लूप के लिए डिफ़ॉल्ट। –

1

मुझे एक ही समस्या थी। मेरी PreferenceActivity खुद को ताज़ा करने के लिए एक आसान तरीका खोजने के लिए विफल हो रहा है, मेरे समाधान मेरी PreferenceActivity में जोड़ने के लिए किया गया था:

/** 
* Called when activity leaves the foreground 
*/ 
protected void onStop() { 
    super.onStop(); 
    finish(); 
} 

इस Prefs SharedPreferences से अगली बार प्रारंभ होने पर फिर से लोड करने के लिए स्क्रीन का कारण होगा। कहने की जरूरत नहीं है, यदि आप बैक बटन का उपयोग करके अपनी वरीयता स्क्रीन पर वापस जाने में सक्षम होना चाहते हैं तो यह दृष्टिकोण काम नहीं करेगा।

+0

मैंने इसे माना, लेकिन मेरी 'वरीयता सक्रियता' अन्य गतिविधियां शुरू करती है, और मेरी गतिविधियों को फिर से शुरू करने के लिए उन गतिविधियों में 'केडडाउन' और 'ऑनकेप' को ओवरराइड करने में परेशानी होगी। सुझाव के लिए धन्यवाद, यद्यपि। – Jakar

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