2014-01-15 1 views
0

im пытается получить значения, но каким-то образом я получаю больше значений. это код, который работает. Кто-нибудь знает, что я делаю неправильно? я действительно искал много мест, но большинство из них устарело. (я проверил элементы 2 и 3) Просто чтобы убедиться, что я только хочу прочитать выбранные флажки списка, но я понятия не имею, откуда взялись 0-1-2-123.Multiselectlistpreference android retrieve values ​​

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

Поиск кода для того, где вы кладете эту информацию в наборе. И btw вы можете просто 'int i = 0; для (Sting s: selections) {System.out.println (" \ ntest "+ i ++ +": "+ s);}' (и я бы сбросил i) –

ответ

0

попробовать следующие коды:

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

Он хранит только те, которые проверяются.

Вы можете поместить значения в виде индексов.

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