2011-08-31 78 views
4

獲取值當前所選項目的ListPreference很簡單:獲取ListPreference選項的關鍵字(不是值) - 可能嗎?

String selected = sharedPrefs.getString(
    getString(R.string.list_preference_array), 
    "default string" 
); 

但現在我需要獲得當前所選項目的關鍵,來代替。這可能嗎?

爲了澄清,XML文件中的一個典型ListPreference定義具有以下組件:

<ListPreference 
    android:key="@string/list_preference_array" 
    android:title="Title of ENTIRE list (not seen by user?)" 
    android:summary="this is what the user sees in small fonts" 
    android:defaultValue="just in case" 
    android:entries="@array/user_friendly_labels" 
    android:entryValues="@array/code_meaningful_strings" 
    android:dialogTitle="User Prompt(big font)" 
    android:showDefault="true" 
    android:showSilent="true" 
/> 

什麼sharedPrefs.getString()回報是從Android的當前選擇:entryValues。我感興趣的是從android:條目目前的選擇。我錯誤地稱它爲「關鍵」,但它確實是一個「相應的標籤」,它必須與實際內容不同。

+0

沒有的GetString(R.string.select_string)的你的關鍵'收到? – Erik

+0

@Erik'getString(R.string.select_string)'是整個ListPreference數組的關鍵字(「名稱」),而不是選擇。 – uTubeFan

+0

@uTubeFan,如果你使用的是ListPreference,沒有關鍵的選定項目,只有一個條目... –

回答

14

猜測的一點:

int index = mylistpreference.findIndexOfValue(selected) // <- selected taken from your code above 
String entry = mylistpreference.getEntries()[index]; 
0

功能是作爲defined

SharedPreferences.getString(String key, String defaultValue); 

因此,在你的示例代碼,getString(R.string.select_string)將返回鍵。

當您添加SharedPreference時,您需要指定密鑰,因此該密鑰與您用於設置該值的密鑰相同。

編輯:

使用SharedPreferences.getString()與ListPreference鍵的鍵將返回值從列表中選擇用戶。您不需要爲ListPreference數組中的每個選項創建鍵,並且這些鍵不會自動創建。使用與ListPreference的entryValues相關的用例語句。

+0

查看我的回覆@ Erik的評論。 – uTubeFan

+0

@uTubeFan,編輯我的答案。 –

1

只需使用:

mylistpreference.getEntry() 

獲得mylistpreference使用:

mylistpreference= (ListPreference) getPreferenceScreen().findPreference(key); 

關鍵是android:關鍵你的偏好定義。 xml裏面< ListPreference>標籤。

0

@shai你的方法滯後,以最後一次選擇的條目

listPreference.getEntry() 

而是@Erik的方法很好地工作

int index = listPreference.findIndexOfValue((String) value) 
String entry = listpreference.getEntries()[index]; 
+0

它很好。你節省了我的時間,謝謝 –

相關問題