2014-10-03 9 views
10

cerco di implementare MultiSelectListPreference per le mie impostazioni di visualizzazione:Android MultiSelectListPreference, java.lang.String non può essere gettato a 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" /> 

L'array:

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

Tuttavia questo dà me seguente eccezione:

java.lang.RuntimeException: impossibile avviare l'attività ComponentI nfo {com.myproject/.SettingsActivity}: java.lang.ClassCastException: java.lang.String non può essere lanciato a java.util.Set

stacktrace completa: http://pastebin.com/kBDByXY5

Tutte le idee che cosa è sbagliato ?


Codice:

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

Puoi incollare il codice qui per favore? – Kiloreux

+1

@AIL non esiste un codice speciale, perché le impostazioni sono create da xml. 'addPreferencesFromResource (R.xml.preferences);' fa tutta la magia. –

+0

Se copio incollare il codice nel mio progetto Android, non ho alcun problema. Ricostruisci il progetto e dicci se il problema persiste – mrroboaat

risposta

26

Ci si sente come si dispone già di una pianura String preferenza in questa chiave sul dispositivo o emulatore. Prova a disinstallare e reinstallare completamente l'app, oppure a utilizzare "Cancella dati" per l'app nel suo schermo in Impostazioni, per cancellare il tuo SharedPreferences esistente.

+1

+1 vero. Problema risolto. –

+0

mi ha salvato la vita! – WenChao

+0

Sì, era così. Stavo scherzando con tutti i diversi tipi di preferenze e quando alla fine ho optato per ListPreference ha iniziato a ricevere un errore "java.util.hash non può essere lanciato come java.lang.String". Disinstallare l'app dal mio dispositivo e semplicemente eseguirla da Android Studio ha risolto il problema. – Chris

Problemi correlati