Java 列表首选项';s getString返回索引(作为字符串),而不是XML中的my string值
好的,我使用Java 列表首选项';s getString返回索引(作为字符串),而不是XML中的my string值,java,android,enums,sharedpreferences,listpreference,Java,Android,Enums,Sharedpreferences,Listpreference,好的,我使用PreferenceFragment的一般设置似乎是正确的,但是,我正在尝试在启动时从我的SharedReferences读取一个值。该值将映射到我创建的Enum 我的第一种方法是获取字符串数组(我的字符串数组值)的索引(如字符串)。因此,我将索引作为字符串,并将其转换为整数。然后我会得到我所有的字符串数组字符串,并在正确的索引处获取一个。从那里我会做一个Enum.valueOf(String)。沃利亚…完成了 这似乎是一个很大的开销,我想我可以摆脱所有的索引中间人的东西。因此,我将
PreferenceFragment
的一般设置似乎是正确的,但是,我正在尝试在启动时从我的SharedReferences
读取一个值。该值将映射到我创建的Enum
我的第一种方法是获取字符串数组
(我的字符串数组值)的索引(如字符串
)。因此,我将索引作为字符串,并将其转换为整数。然后我会得到我所有的字符串数组
字符串,并在正确的索引处获取一个。从那里我会做一个Enum.valueOf(String)
。沃利亚…完成了
这似乎是一个很大的开销,我想我可以摆脱所有的索引
中间人的东西。因此,我将所有字符串数组值
从字符串数字更改为表示枚举
名称的字符串
但是,这仍然将索引作为字符串提供给我。为什么?
我的值不能有实际字符串吗?
代码
XML
在一个新角色之后
一句话之后
3个字符之后
没有一个
性格
单词
缓冲器
词组
...
您是否清除了应用程序的数据或重新安装了应用程序以清除旧的首选项?最终,这就是问题所在。我以前知道清除应用程序数据,以前也做过,但这次失败了。不管怎样,我还是回到了原来的方式,它起了作用。然后它就停止工作了,因为它最终切换到了“缓冲区”。所以我重新实现了我的新方法并清除了所有的数据。现在一切都很好,除了我发布的一些其他问题
@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>