我在理解如何将ListPreference
的条目值保存为整数方面遇到了一些麻烦。截至目前,我已将ListPreference
定义如下:
<ListPreference
android:defaultValue="@string/list_preference_sorting_options_default_value"
android:title="@string/list_preference_sorting_options_title"
android:key="@string/list_preference_sorting_options_key"
android:entries="@array/list_preference_sorting_options_entries"
android:entryValues="@array/list_preference_sorting_options_entry_values"/>
...其中entries
和entryValues
属性在以下数组中定义:
<array name="list_preference_sorting_options_entries">
<item>@string/list_preference_sorting_options_entry_popularity</item>
<item>@string/list_preference_sorting_options_entry_top_rated</item>
</array>
<array name="list_preference_sorting_options_entry_values">
<item>@string/list_preference_sorting_options_entry_value_popularity</item>
<item>@string/list_preference_sorting_options_entry_value_top_rated</item>
</array>
我知道我在list_preference_sorting_options_entry_values
数组中使用字符串值。但是,如果我以不同的方式定义我的数组,例如:
<array name="list_preference_sorting_options_entry_values">
<item>0</item>
<item>1</item>
</array>
...然后在我的应用程序中,如果我尝试访问设置活动,我的应用程序崩溃了。
此外,如果我尝试将我的输入值作为SharedPreferences
的整数读取(即使它们被存储为字符串),如下所示:
int methodFlag = preferences.getInt(getString(R.string.list_preference_sorting_options_key), 0);
...然后我收到一个Java错误,我无法将String转换为int。为了正确获取作为int的条目值,我需要使用getString()
方法然后将其解析为int:
String preferenceMethodFlagString = preferences.getString(getString(R.string.list_preference_sorting_options_key),getString(R.string.list_preference_sorting_options_default_value));
int preferenceMethodFlag = Integer.parseInt(preferenceMethodFlagString);
有没有办法让我通过arrays.xml直接存储整数值?如果我使用此实现(使用arrays.xml),我是否总是必须将String解析为int?
我已经看到其他SO问题,如果使用SharedPreferences.Editor
,整数值将存储到ListPreference
的条目值中。这是存储整数值的唯一方法吗?
答案 0 :(得分:2)
ListPreference的设计使其只能保存字符串值。
ListPreference的成员变量如下
private CharSequence[] mEntries;
private CharSequence[] mEntryValues;
private String mValue;
private String mSummary;
此外,读取值为
mEntries = a.getTextArray(com.android.internal.R.styleable.ListPreference_entries);
mEntryValues = a.getTextArray(com.android.internal.R.styleable.ListPreference_entryValues);
getTextArray()仅查找字符串数组资源ID。
因此,条目和entryValues应始终为字符串资源。
如果要使用int值,
<string-array name="entries_list_preference">
<item>0</item> <!-- This does not make it int, it will be stored as string only -->
<item>1</item>
<item>2</item>
</string-array>
<string-array name="entryvalues_list_preference">
<item>0</item>
<item>1</item>
<item>2</item>
</string-array>
当您读取其值时,将其解析为整数。
ListPreference listPreference = (ListPreference) findPreference ("list_preference");
String value = listPreference.getValue();
if(!TextUtils.isEmpty(value))
performAction(Integer.parseInt(listPreference.getValue()));
现在您可以根据自己的要求编写performAction(int type)方法。
答案 1 :(得分:1)
你不能这样做。 Android只对条目和条目值使用String数组。但您可以使用Integer.parseInt()
方法轻松地将String转换为int。希望这会有所帮助。