gpt4 book ai didi

java - ListPreference 将值存储为字符串而不是整数

转载 作者:行者123 更新时间:2023-11-29 04:33:44 27 4
gpt4 key购买 nike

我无法理解如何将 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"/>

...其中 entriesentryValues 属性在以下数组中定义:

<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>

...然后在我的应用程序中,如果我尝试访问设置 Activity ,我的应用程序就会崩溃。

此外,如果我尝试从 SharedPreferences 中以整数形式读取我的条目值(即使它们存储为字符串),如下所示:

int methodFlag = preferences.getInt(getString(R.string.list_preference_sorting_options_key), 0);

...然后我收到无法将 String 转换为 int 的 Java 错误。为了正确获取作为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 的条目值中。这是存储整数值的唯一方法吗?

最佳答案

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。

因此,条目和条目值应该始终是字符串资源。

如果你想使用整型值,

<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) 方法。

关于java - ListPreference 将值存储为字符串而不是整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42654525/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com