2011-02-19 14 views
34

मेरे पास वरीयताओं के साथ एक छोटा एपी है। इस कक्षा में मैंने जीपीएस से निर्देशांक प्राप्त करने के लिए ऑन प्रेफरेंस क्लिक किया है। जब श्रोता लौटाता है, तो मेरी आशा है कि लैट/लम्बी टेक्स्टेट स्वचालित रूप से सेट हो। मैं वहाँ बाहर हर स्रोत नमूना की कोशिश की है, कोई भाग्य:एंड्रॉइड: वरीयताओं को प्रोग्रामेटिक रूप से सेट करना

public void onLocationChanged(Location l) { 
    Log.d("H","Location Received: "+l.toString()); 
    prefLocation.setSummary(l.toString()); 
    SharedPreferences settings = getSharedPreferences(PREFS_NAME, MODE_PRIVATE); 
    SharedPreferences.Editor editor1 = settings.edit(); 
    editor1.putString("posLat","xxx"); 
    editor1.commit(); 
} 

इस कोड को निष्पादित करता है जब जब मैं अपने PreferenceScreen और स्थान श्रोता रिटर्न पर क्लिक करें, कुंजी "poslat" के साथ EditTextPreference अभी भी पुराने मूल्य को दर्शाता है।

मैं क्या गलत है यह जानने की कोशिश कर पागल हो रहा हूं!

मेरे prefs.xml:

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:key="My_Shared_Preferences"> 
    <PreferenceCategory 
     android:title="Your Location"> 
     <PreferenceScreen 
      android:title="Find Location..." 
      android:key="location" 
      android:summary="Click here to read your location automatically"/> 
     <EditTextPreference 
      android:title="Latitude" 
      android:key="posLat" /> 
     <EditTextPreference 
      android:title="Longtitude" 
      android:key="posLong" /> 
     <EditTextPreference 
      android:title="Altitude" 
      android:key="posAlt" /> 
    </PreferenceCategory> 
</PreferenceScreen> 

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

उत्तर

32

मुझे एक ही समस्या है। मेरा समाधान किसी दिए गए नाम के साथ मैन्युअल रूप से बनाई गई वरीयताओं के बजाय डिफ़ॉल्ट साझा वरीयताओं का उपयोग करना था।

बदलें इस से SharedPreferences के संदर्भ:

SharedPreferences settings = getSharedPreferences(PREFS_NAME, MODE_PRIVATE); 
इस के लिए

:

SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context); 

और देखते हैं कि यदि कोई फर्क नहीं पड़ता।

+8

दोस्त, मेरी इच्छा है कि मैं आपको एक कॉफी खरीद सकूं। बहुत - बहुत धन्यवाद! –

+9

आपका स्वागत है :) उस समय के साथ कुछ समय तक संघर्ष किया, भावना महसूस करें। मैं एक कॉफी ले जाऊंगा और दिखाऊंगा कि यह आप पर था;) –

0

"पुराना मूल्य" क्या है। आपके द्वारा पोस्ट किए गए कोड के साथ यह आपकी प्राथमिकताओं में संग्रहीत होने वाली एकमात्र चीज की तरह दिखता है स्ट्रिंग "xxx" आपको उस स्ट्रिंग के साथ प्रतिस्थापित करने की आवश्यकता है जो आपके putString() विधि के अंदर स्थान का प्रतिनिधित्व करती है।

+0

है पुराने मूल्य एक मनमाना संख्या मैं वरीयता स्क्रीन पर मैन्युअल रूप से लिखा गया है बदल गया है मेरे ऐप चलाते समय। मैं यह मान xxx में बदलना चाहता हूं। मैं आपके मतलब से स्पष्ट नहीं हूं "उस स्ट्रिंग के साथ प्रतिस्थापित करें जो आपके putString() विधि के अंदर स्थान का प्रतिनिधित्व करता है।" जवाब के लिए धन्यवाद। –

8

लगता है कि यह वास्तव में (1 और 2 देखें)

यह करने के लिए नया तरीका

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); 
SharedPreferences.Editor editor = preferences.edit(); 
editor.putBoolean(PREF_NAME, YOUR_VALUE); 
editor.commit(); 
संबंधित मुद्दे