SharedPreferences如何从ListPreference读取标题而不是值

时间:2012-08-27 14:10:50

标签: android sharedpreferences

我正在阅读像

这样的共享偏好
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”怎么办?我可以通过键,值对读取吗?

3 个答案:

答案 0 :(得分:3)

如果您有标题索引,则可以从资源中提取标题。试试这段代码:

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

答案 1 :(得分:1)

你只能获得价值。如果您查看了可以从DDMS中提取的实际共享首选项文件 - &gt;数据 - 数据 - &gt;包裹名字。您将只看到值并存储密钥,而不是标题。

但这不是一个真正的问题,因为你已经在阵列中了。

祝你好运

答案 2 :(得分: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>

但是由于该值已知,您可以搜索value数组并以此方式获取索引,并使用它来从其数组中获取标题。我有一个这样的功能:

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