1

我正在阅读共享偏好,例如

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”怎么办。我可以通过键、值对读取吗?

4

3 回答 3

3

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

CharSequence[] titles = context.getResources().getTextArray(R.array.list_of_text_modes);
String myTitle = titles[titleIndex];
于 2012-08-27T14:25:23.350 回答
1

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

但这并不是真正的问题,因为您的阵列中已经有了它。

祝你好运

于 2012-08-27T14:27:45.937 回答
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
于 2013-07-25T01:20:28.047 回答