Multiselectlistpreference android检索值

时间:2014-01-15 13:57:24

标签: android eclipse sharedpreferences multi-select

我试图检索值但不知何故,我得到了更多的价值。 这是运行的代码。谁知道我做错了什么?我在很多地方搜索过,但大多数已经过时了。 (我检查了第2项和第3项) 只是为了确保我只想读出列表中选中的复选框,但我不知道0-1-2-123来自哪里。

pref_app.xml

    <MultiSelectListPreference
        android:title="Categories"
        android:key="rssfeeds"
        android:summary="List to choose from"
        android:entries="@array/catos"
        android:entryValues="@array/catovalues"
        android:defaultValue="@array/catodefault"
        android:dialogTitle="Categories"
        >
    </MultiSelectListPreference>

的strings.xml

<string-array name="catos">
    <item >Movies</item>
    <item >Test</item>
    <item >TEst23</item>
</string-array>
<string-array name="catovalues">
    <item >movies-checked</item>
    <item >test-checked</item>
    <item >test23-checked</item>
</string-array>
    <string-array name="catodefault">
    <item >movies-default</item>
    <item >test-default</item>
    <item >TEST23-default</item>
</string-array>

返回主xml中的代码

        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
        Set<String> selections = preferences.getStringSet("rssfeeds", null);
        String[] selected= selections.toArray(new String[] {});
        for (int i = 0; i < selected.length ; i++){
            System.out.println("\ntest" + i +" : " + selected[i]);
        }

Logcat结果:

01-15 14:15:49.016: I/System.out(4555): test0 : test23-checked
01-15 14:15:49.016: I/System.out(4555): test1 : 2
01-15 14:15:49.016: I/System.out(4555): test2 : 1
01-15 14:15:49.016: I/System.out(4555): test3 : 0
01-15 14:15:49.016: I/System.out(4555): test4 : 123
01-15 14:15:49.016: I/System.out(4555): test5 : test-checked

2 个答案:

答案 0 :(得分:2)

它仅存储已检查的那些。

您可以将值作为索引。

<string-array name="catos">
    <item >Movies</item>
    <item >Test</item>
    <item >TEst23</item>
</string-array>
<string-array name="catovalues">
    <item >0</item>
    <item >1</item>
    <item >2</item>
</string-array>

0 - Movies => Checked 
1 - Test   => Unchecked 
2 - TEst23 => Checked 

在首选项文件中,只会索引0和2,您可以假设其他文件未标记。

因此,如果您分析Set <String>,其大小将只有2 strings 0和2。

答案 1 :(得分:0)

试试以下代码:

for(String s: selections){
    if("movies-checked".equals(s)) {
    }
    if("test-checked".equals(s)) {
    }
    if("test23-checked".equals(s)) {
    }
}