2014-10-03 13 views
10

próbuję wdrożyć MultiSelectListPreference dla mojego widoku ustawień:Android MultiSelectListPreference, java.lang.String nie mogą być oddane do java.util.Set

<MultiSelectListPreference 
    android:title="@string/title" 
    android:summary="@string/message" 
    android:key="pref_foobar" 
    android:defaultValue="@array/empty_array" 
    android:entries="@array/fooArray" 
    android:entryValues="@array/fooValues" /> 

Tablica:

<resources> 
    <string-array name="fooArray"> 
     <item>Foo</item> 
     <item>Bar</item> 
    </string-array> 
    <string-array name="fooValues"> 
     <item>foo_value</item> 
     <item>bar_value</item> 
    </string-array> 
    <string-array name="empty_array"/> 
</resources> 

Jednak to daje ja następujący wyjątek:

java.lang.RuntimeException: Nie można rozpocząć działalności KomponentI nfo {com.myproject/.SettingsActivity}: java.lang.ClassCastException: java.lang.String nie mogą być oddane do java.util.Set

Pełna StackTrace: http://pastebin.com/kBDByXY5

jakieś pomysły co niewłaściwy ?


Kod:

public class SettingsActivity extends Activity { 

    private static final String TAG_SETTINGS_FRAGMENT = "SETTINGS_FRAGMENT"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     if (savedInstanceState == null) { 
      getFragmentManager().beginTransaction() 
           .replace(android.R.id.content, new PreferenceFragment(), TAG_SETTINGS_FRAGMENT).commit(); 
     } 
    } 

    public static class PreferenceFragment extends android.preference.PreferenceFragment{ 

     public PreferenceFragment() { 
      //required 
     } 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      addPreferencesFromResource(R.xml.preferences); 
     } 
    } 
} 
+0

Czy możesz wkleić kod tutaj, proszę? – Kiloreux

+1

@AIL nie ma specjalnego kodu, ponieważ ustawienia są tworzone z xml. 'addPreferencesFromResource (R.xml.preferences);' robi całą magię. –

+0

Jeśli skopiuję wklej swój kod w moim projekcie Android, nie mam problemu. Przebuduj projekt i powiedz nam, czy problem nadal występuje. – mrroboaat

Odpowiedz

26

on czuje się jak masz już zwykły String preferencje pod tym przyciskiem na urządzeniu lub emulatorze. Spróbuj całkowicie odinstalować i ponownie zainstalować aplikację lub używając opcji "Wyczyść dane" dla aplikacji na ekranie w Ustawieniach, aby wymazać istniejącą wersję SharedPreferences.

+1

+1 prawda. Problem rozwiązany. –

+0

uratowało mi życie! – WenChao

+0

Tak, to było to. Miałem problemy z różnymi typami preferencji i kiedy w końcu zdecydowałem się na ListPreference, zaczęło pojawiać się błąd "java.util.hash nie może być rzutowany jako java.lang.String". Odinstalowanie aplikacji z mojego urządzenia i po prostu uruchomienie jej z Android Studio ponownie rozwiązało problem. – Chris

Powiązane problemy