2017-07-28 2 views
0

Ich habe eine Android-App mit einem Bildschirm Einstellungen. Die einzige Voreinstellung in diesem Bildschirm ist eine MultiSelectListPreference mit vier Optionen. Ich versuche, die Methode onPreferenceChange zu implementieren, um die Zusammenfassung der Präferenz jedes Mal zu aktualisieren, wenn sich eine Option ändert.Seltsame Werte in onPreferenceChange-Methode

Um dies zu tun, bin ich das Objekt newValue zu einem HashSet von Zeichenfolgen, aber wenn ich den Inhalt des HashSet ausloggen, entsprechen sie nicht mit den Werten, die der Benutzer ausgewählt.

Dies ist mein Code:

@Override 
public boolean onPreferenceChange(Preference preference, Object newValue) { 
    if (preference instanceof MultiSelectListPreference) { 
     MultiSelectListPreference pref = (MultiSelectListPreference) preference; 
     HashSet<String> values = (HashSet<String>) newValue; 
     Log.e("SettingsActivity", values.toString()); 
    } 

    return true; 
} 

die Log-Nachricht ausgedruckt Und hier ist, wenn ich alle vier Optionen wählen:

07-28 13:13:00.896 31196-31196/com.example.android.theguardiannews E/SettingsActivity: 
[ film , environment, business , environment , politics, business] 

Edit: ist hier ein Bild alle mögliche Optionen:

Weiß jemand, warum das passiert?

+0

können Sie ein Bild mit anzeigen Präferenz Bildschirm, grundsätzlich ich whant einen Druck aller Listenmöglichkeiten. –

+0

@BrunoFerreira Ich habe meine Frage mit dem gesuchten Bild bearbeitet. –

Antwort

0

So können Sie innerhalb dieses onPreferenceChange tun versuchen() Methode:

SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this); 
Set<String> selections = sharedPrefs.getStringSet("Your_preference_key", null); 
String[] selected = selections.toArray(new String[] {}); 
Toast.makeText(context, selected[all], Toast.LENGTH_LONG).show(); 

und für Update Sumary nur diese Zeile hinzufügen:

Preference pref = findPreference("pref_key"); 
pref.setSummary(selected[all]); 

So wie Code wahrscheinlich sein:

public boolean onPreferenceChange(Preference preference, Object newValue) { 
    SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this); 
    Set<String> selections = sharedPrefs.getStringSet("Your_preference_key", null); 
    String[] selected = selections.toArray(new String[] {}); 
    Preference pref = findPreference("Your_pref_key"); 
    pref.setSummary(selected[all]); 

    return true; 
} 
+0

Würde das nicht die Werte anzeigen, bevor sie aktualisiert werden? Ich denke, dass die Werte aktualisiert werden, nachdem onPreferenceChanged aufgerufen wird, so dass Sie die Werte anzeigen, bevor sie aktualisiert werden. Bitte korrigieren Sie mich, wenn ich falsch liege –

+0

Sie haben Recht mein schlechtes, stellen Sie einfach außerhalb der Methode und sehen, was passiert. –

+0

Sie können summary außerhalb der Methode aktualisieren, wenn es funktioniert, nur ausgewählte Werte und aktualisieren Sie die Summe. –

Verwandte Themen