ListPreference的getString返回索引(作为字符串)而不是XML中的字符串值

时间:2015-07-24 09:12:18

标签: java android enums sharedpreferences listpreference

好的,我使用PreferenceFragment的常规设置似乎是正确的,但是,我尝试在启动时从SharedPreferences读取值。该值将映射到我创建的Enum

我的第一个方法是处理String(我的字符串数组值)的索引(string-array)。所以我会将索引作为字符串并将其转换为Integer。然后我会获得所有string-array字符串,并以正确的索引获取一个字符串。从那里我会做Enum.valueOf(String)。 Volia ...完成。

这似乎是很多开销,我想我可以摆脱所有Index中间人的东西。所以我将所有string-array values从字符串数字更改为代表Enum名称的字符串。

但是,这仍然是一个字符串索引。为什么? 我的值可以没有实际字符串吗?

代码

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    PreferenceManager.setDefaultValues(getBaseContext(), R.xml.preferences, false);

    SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);

    // Assigns enumString the value of "2", not "BUFFER". This is my issue!
    String enumString = pref.getString(
            getString(R.string.pref_search_method_key),
            Search.BUFFER.name());

    searchMethod = Search.valueOf(enumString);

}

XML

<string-array name="search_method">
    <item>After a New Character</item>
    <item>After a Word</item>
    <item>After 3 Characters</item>
    <item>None</item>
</string-array>

<!-- Before I gave these the values 0, 1, 2, 3  -->
<string-array name="search_method_values">
    <item>CHARACTER</item>
    <item>WORD</item>
    <item>BUFFER</item>
    <item>PHRASE</item>
</string-array>

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
    xmlns:android="http://schemas.android.com/apk/res/android">

    <PreferenceCategory
        android:title="@string/pref_header_search">

        <ListPreference
            android:key="@string/pref_search_method_key"
            android:title="@string/pref_search_method"
            android:summary="@string/pref_search_method_description"
            android:defaultValue="BUFFER"
            android:entries="@array/search_method"
            android:entryValues="@array/search_method_values" />

    </PreferenceCategory>

    ...

</PreferenceScreen>

0 个答案:

没有答案