2010-04-24 9 views
18

क्या एक्सएमएल में लिस्टप्रिफरेंस को परिभाषित करना संभव है और getInt का उपयोग करके साझा किए गए संदर्भों से मूल्य पुनर्प्राप्त करना संभव है? यहाँ मेरी Xml है:एक्सएमएल में परिभाषित एंड्रॉइड लिस्ट प्रीफरेंस कैसे प्राप्त करें जिनके मान पूर्णांक हैं?

<ListPreference android:key="@string/prefGestureAccuracyKey" 
    android:title="@string/prefGestureAccuracyTitle" android:summary="@string/prefGestureAccuracyDesc" 
    android:entries="@array/prefNumberAccuracyLabels" android:entryValues="@array/prefNumberAccuracyValues" 
    android:dialogTitle="@string/prefGestureAccuracyDialog" 
    android:persistent="true" android:defaultValue="2" 
    android:shouldDisableView="false" /> 

और मैं की तरह कुछ के साथ मूल्य प्राप्त करना चाहते हैं: पूर्णांक वैल = sharedPrefs.getInt (कुंजी, DefaultValue)।

इस समय मुझे getString का उपयोग करना होगा और परिणाम को पार्स करना होगा।

+0

कि मैनुअल http://developer.android.com/intl/de/reference/android/content/SharedPreferences.html – Pentium10

+0

मैं डॉन 'के अनुसार काम करना चाहिए आपका प्रश्न नहीं मिला। आप किस मूल्य को प्राप्त करने के इच्छुक हैं? – Macarse

+0

ठीक है कि एक्सएमएल एक वरीयता बनाता है जिसका प्रकार स्ट्रिंग इंटीजर नहीं है। मैं एक वरीयता चाहूंगा जिसका मूल्य दृढ़ता से int के रूप में टाइप किया गया है।यह प्रश्न मैंने पिछले एक से लिखा था जो संदर्भ में बताता है: http://stackoverflow.com/questions/2705091/how-do-i-cast-from-int-to-generic-type-integer –

उत्तर

39

मेरी समझ यह है कि ListPreference केवल स्ट्रिंग सरणी के साथ काम कर सकता है। आपको getString() का उपयोग करना होगा और स्वयं को पूर्णांक में परिवर्तित करना होगा। इस पर बग रिपोर्ट के लिए http://code.google.com/p/android/issues/detail?id=2096 देखें। यह स्ट्रिंग्स के अलावा कुछ भी संभालने के लिए ListPreference को विस्तारित करने की Google योजनाओं की तरह नहीं दिखता है।

इसके अलावा: आपको प्राथमिकता को एक स्ट्रिंग के रूप में भी स्टोर करने की आवश्यकता होगी। अन्यथा, जब आपकी शुरुआत होती है तो आपकी वरीयता गतिविधि क्रैश हो जाती है और स्ट्रिंग मान को पढ़ने का प्रयास करती है।

+0

धन्यवाद। मैं उस बग रिपोर्ट में नहीं आया था। –

6

मैंने इसे थोड़ा और चरम तरीके से किया।

मैंने ListPreference का उपयोग किया और मेरी प्रविष्टि बनाई है Values ​​array में स्ट्रिंग्स हैं जिन्हें मैं Integer.parseInt() के साथ पूर्णांक में परिवर्तित कर सकता हूं।

फिर मेरी प्राथमिकताएं सक्रियता में, मैंने इस वरीयता के लिए ऑनप्रिएंशन चेंजलिस्टर सेट किया है, और ऑनपेरेंशन चेंज() विधि में मैंने पूर्णांक संस्करण के लिए एक अलग वरीयता निर्धारित की है - यह दूसरा वह है जिसे मैं वास्तव में अपने कोड में उपयोग करता हूं। पहले उपयोगकर्ता विकल्प के लिए पहला है।

इस तरह मुझे इसे देखने की आवश्यकता होने पर हर बार एक स्ट्रिंग को int में परिवर्तित करने की आवश्यकता नहीं होती है, मैं इसे तब करता हूं जब उपयोगकर्ता इसे सेट करता है। शायद ओवरकिल, लेकिन यह काम करता है :)

0

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

2

तथ्य के रूप में आप डॉक्स में पढ़ सकते हैं:

http://developer.android.com/reference/android/preference/ListPreference.html#getValue()

विधि एक ListPreference मूल्य प्राप्त करने के लिए है:

public String getValue()

तो तुम एक स्ट्रिंग प्राप्त । यह एक बड़ा सौदा नहीं है, लेकिन पूर्णांक स्वीकार करने के लिए सुंदर हो सकता है।

0

लेकिन मेरे लिए, आपको पहले स्ट्रिंग प्रकार मिलता है: स्ट्रिंग numStr = prefs.getString ("कुंजी", "-555"); तो : `

try { 
    int yourInt = Integer.parseInt(numStr); 
    if(yourInt != -555) 
    { 
     //do your stuff 
    } 
} 
catch(Exception e) 
{ 
    ... 
} 

`