我试图检索值但不知何故,我得到了更多的价值。 这是运行的代码。谁知道我做错了什么?我在很多地方搜索过,但大多数已经过时了。 (我检查了第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
答案 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)) {
}
}