2012-08-27 58 views
1

我讀共享偏好像SharedPreferences如何閱讀標題從ListPreference

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); 

,然後用preferences.getString("list_of_text_modes", "0")我可以得到任何共享偏好的價值並不值。在我的例子中(0或1)

是否有可能獲得標題,而不僅僅是價值?

例如。我正在使用ListPreference。

<ListPreference 
      android:entries="@array/list_of_text_modes" 
      android:entryValues="@array/list_of_text_mode_values" 
      android:key="list_of_text_modes" 
      android:summary="" 
      android:title="@string/title_language_mode" 
      android:defaultValue="default" />  

    <string-array name="list_of_text_modes"> 
     <item>Default</item> 
     <item>Settings</item> 
    </string-array> 
    <string-array name="list_of_text_mode_values"> 
     <item>0</item> 
     <item>1</item> 

現在我得到「0」,如果我選擇「默認」。我可以讀標題「默認」嗎?或者偏好我只能讀取值?

如果我沒有0和1,該怎麼辦?如果我另存爲「text1」和「tetx2」,該怎麼辦?我可以通過鑰匙,值對讀嗎?

+1

'getEntries()'? –

回答

3

如果您有標題索引,則可以從資源中提取標題。試試這個代碼:

CharSequence[] titles = context.getResources().getTextArray(R.array.list_of_text_modes); 
String myTitle = titles[titleIndex]; 
+0

感謝您的幫助 – mbrc

+0

您可以使用方法preferences.getAll()來獲取鍵值對的映射 – HitOdessit

1

你只能得到這個值。如果你看看實際的共享首選項文件,你可以從DDMS - >數據 - 數據 - >軟件包的名稱。您只會看到該值,並且存儲了密鑰,而不是標題。

但它不是一個真正的問題,因爲你已經在你的數組中。

祝你好運

1

我想弄清楚這一點。對於原來的問題來說太遲了,但是我想出了Hit的答案。對於標題和值都是字符串的數組,找到索引並不簡單。

<string-array name="sound_keys"> 
    <item>Gong1</item> 
    <item>Gong2</item> 
</string-array> 
<string-array name="sound_values"> 
    <item>gonghi</item> 
    <item>gongmid</item> 
</string-array> 

但由於值是已知的,您可以搜索值陣列,並獲得索引方式,並用它來拿到冠軍從它的陣列。我有一個這樣的功能:

SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this); 
String prefValue = sp.getString("sound_values", "some default"); 
// the arrays used by the ListPreference 
CharSequence[] keys = getApplicationContext().getResources().getTextArray(R.array.sound_keys); 
CharSequence[] values = getApplicationContext().getResources().getTextArray(R.array.sound_values); 
// loop and find index... 
int len = values.length; 
for (int i = 0; i < len; i++) { 
    if (values[i].equals(prefValue)) { 
     return (String) keys[i]; 
    } 
} 
// if not found use some default value