2011-10-07 35 views
5

मैं एंड्रॉइड विकास के लिए नया हूं। मेरे ऐप में, जब कोई उपयोगकर्ता वरीयता बदलता है, तो कुछ चर अपडेट करने के लिए फ़ंक्शन को कॉल किया जाना चाहिए।* फ़ंक्शन * कॉल करने के बाद * ऑनपेरेंशन चेंज?

यह मेरे वर्तमान कोड है:

mypref.setOnPreferenceChangeListener(
    new OnPreferenceChangeListener() { 
     public boolean onPreferenceChange(Preference arg0, Object arg1) { 
     if(arg1.toString().matches("...") == false) { 
      ... 
      return false; 
     } 

     ... 

     updateVariables(); 
     return true; 
    } 
}); 

समस्या यह है कि जब updateVariables() कहा जाता है, वरीयता मूल्य अभी तक अपडेट नहीं किया जाता है और समारोह पुराने मूल्य देखता है।

private void updateVariables() 
{ 
    SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this); 
    Map<String, ?> savedKeys = sharedPref.getAll(); 

    for (Map.Entry<String, ?> entry : savedKeys.entrySet()) { 
     // for each preference... 
    } 
} 

कम से कम आक्रामक समाधान क्या होगा? धन्यवाद!

उत्तर

4

onPreferenceChange()(arg1) का दूसरा तर्क नया मान है। मैं सुझाव देता हूं कि इसे updateVariables() पर भी तर्क के रूप में जोड़ें और ऑब्जेक्ट को इसके साथ काम करने के लिए पास करें।

+0

धन्यवाद का उपयोग करना। लेकिन क्या होगा यदि 'अपडेट वैरिएबल()' में मुझे कई अन्य वरीयताओं को फिर से शुरू करना है? मुझे कई अलग-अलग तर्कों की आवश्यकता होगी। – danieleds

+0

यह यहां आपको केवल वरीयता मान देता है जो बदल गया है। कॉलबैक वापस आने तक अन्य सभी समान हैं। तो आपको बस एक को अग्रेषित करना होगा, अन्य सभी को सामान्य 'साझाकरण' ऑब्जेक्ट बनाकर पढ़ा जा सकता है। * (इसके अलावा आप अभी भी एक 'सूची' का उपयोग तर्क के रूप में कर सकते हैं यदि आपको प्रदान करने के लिए बहुत सारे तर्क मिलते हैं) * –

+0

हम्म ... शायद मैं इसे गलत कर रहा हूं, लेकिन मैंने 'अपडेटवॉर्बल्स' का एक उदाहरण जोड़ा है() '। यदि मैं अद्यतन मूल्य के साथ अतिरिक्त तर्क जोड़ता हूं तो मैं चक्र कैसे कर सकता हूं? मैं वही वरीयता 2 बार प्रोसेसिंग से कैसे बच सकता हूं (साझा समय से पुराने मूल्य के साथ एक बार, एक बार तर्क से नए मूल्य के साथ)? मैं केवल गंदे समाधानों के बारे में सोच सकता हूं: एस – danieleds

0

PreferenceFragmentCompat

public class FragmentSettings 
extends PreferenceFragmentCompat 
implements SharedPreferences.OnSharedPreferenceChangeListener 


@Override 
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { 

    addPreferencesFromResource(R.xml.app_preferences); 

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


@Override 
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { 

    switch(key) 
    { 
     case "KEY1": 
      // DO STUFF 
      break; 

     case "KEY2": 
      // DO STUFF 
      break; 
    } 
} 
संबंधित मुद्दे