2014-10-03 6 views
10

Ich versuche MultiSelectListPreference für meine Einstellungen zu implementieren anzuzeigen:Android MultiSelectListPreference, java.lang.String kann nicht auf java.util.Set gegossen werden

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

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

aber dies gibt folgende Ausnahme mir:

java.lang.RuntimeException: Kann Aktivität Componenti starten nfo {com.myproject/.SettingsActivity}: java.lang.ClassCastException: java.lang.String kann nicht auf gegossen werden java.util.Set

Vollstacktrace: http://pastebin.com/kBDByXY5

Irgendwelche Ideen, was ist falsch ?


Code:

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

Können Sie den Code bitte hier einfügen? – Kiloreux

+1

@AIL gibt es keinen speziellen Code, weil die Einstellungen von XML erstellt werden. 'addPreferencesFromResource (R.xml.preferences);' macht all die Magie. –

+0

Wenn ich den Code in mein Android-Projekt kopieren, habe ich kein Problem. Erstellen Sie das Projekt neu und teilen Sie uns mit, ob das Problem weiterhin besteht – mrroboaat

Antwort

26

Es fühlt sich an wie Sie bereits eine Ebene String Präferenz unter diesem Schlüssel auf dem Gerät oder Emulator haben. Versuchen Sie, die App vollständig zu deinstallieren und neu zu installieren, oder verwenden Sie "Daten löschen" für die App auf dem Bildschirm unter Einstellungen, um Ihre bestehende SharedPreferences zu löschen.

+1

+1 wahr. Problem gelöst. –

+0

hat mein Leben gerettet! – WenChao

+0

Yup, das war es. Ich habe mich mit den verschiedenen Voreinstellungen beschäftigt und als ich mich schließlich auf ListPreference festgelegt habe, habe ich einen Fehler bekommen: "java.util.hash kann nicht als java.lang.String" gecastet werden. Durch das Deinstallieren der App von meinem Gerät und das einfache Ausführen von Android Studio wurde das Problem behoben. – Chris

Verwandte Themen