好的,我使用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);
}
<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>