2012-08-27 38 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