477 Stimmen

Wie kann ich den aktuellen Wert einer Android-Einstellung in der Einstellungsübersicht anzeigen?

Das muss sehr oft vorkommen.

Wenn der Benutzer die Einstellungen in einer Android-App bearbeitet, möchte ich, dass er den aktuell eingestellten Wert der Einstellung im Feld Preference Zusammenfassung.

Beispiel: Ich habe eine Einstellung für "Alte Nachrichten verwerfen", die die Anzahl der Tage angibt, nach denen Nachrichten bereinigt werden müssen. In der PreferenceActivity Ich möchte, dass der Benutzer das sieht:

"Alte Nachrichten verwerfen" <- Titel

"Nachrichten bereinigen nach x Tage" <- Zusammenfassung wobei x ist der aktuelle Präferenzwert

Extra Kredit: machen Sie diese wiederverwendbar, so kann ich leicht gelten es für alle meine Präferenzen unabhängig von ihrem Typ (so dass es mit EditTextPreference, ListPreference etc. mit minimalen Betrag der Codierung arbeiten).

12voto

lordmegamax Punkte 2604

Für EditTextPreference:

public class MyEditTextPreference extends EditTextPreference {
    public MyEditTextPreference(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public MyEditTextPreference(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public void setText(String text) {
        super.setText(text);
        setSummary(text);
    }
}

11voto

dhaag23 Punkte 6076

Eigentlich, CheckBoxPreference hat die Möglichkeit, je nach Wert des Kontrollkästchens eine andere Zusammenfassung anzugeben. Siehe die Attribute Android:summaryOff und Android:summaryOn (sowie die entsprechenden CheckBoxPreference-Methoden).

11voto

Irritator Punkte 322

Falls jemand noch nach Antworten auf diese Frage sucht, sollte er sich die folgenden Seiten ansehen dreiunddreißigvierzig s Antwort.

<ListPreference
    android:key="pref_list"
    android:title="A list of preferences"
    android:summary="%s"
    android:entries="@array/pref_list_entries"
    android:entryValues="@array/pref_list_entries_values"
    android:defaultValue="0" />

Android ersetzt %s durch den aktuellen String-Wert der Präferenz, wie er von der ListPreference-Auswahl angezeigt wird.

7voto

alexx Punkte 603

Vielen Dank für diesen Tipp!

Ich habe einen Präferenzbildschirm und möchte den Wert für jede Listenpräferenz als Zusammenfassung anzeigen.

Das ist jetzt mein Weg:

public class Preferences extends PreferenceActivity implements OnSharedPreferenceChangeListener {

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

@Override
protected void onResume() {
    super.onResume();

    // Set up initial values for all list preferences
    Map<String, ?> sharedPreferencesMap = getPreferenceScreen().getSharedPreferences().getAll();
    Preference pref;
    ListPreference listPref;
    for (Map.Entry<String, ?> entry : sharedPreferencesMap.entrySet()) {
        pref = findPreference(entry.getKey());
        if (pref instanceof ListPreference) {
            listPref = (ListPreference) pref;
            pref.setSummary(listPref.getEntry());
        }
    }

    // Set up a listener whenever a key changes            
    getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}

@Override
protected void onPause() {
    super.onPause();

    // Unregister the listener whenever a key changes            
    getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);    
}

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
    Preference pref = findPreference(key);

    if (pref instanceof ListPreference) {
        ListPreference listPref = (ListPreference) pref;
        pref.setSummary(listPref.getEntry());
    }
}

Dies funktioniert für mich, aber ich frage mich, was ist die beste Lösung (Leistung, Stabilität, Skalierbarkeit): die, die Koem zeigt, oder diese?

7voto

Christian García Punkte 3739

Ich habe gesehen, dass alle abgestimmten Antworten zeigen, wie man die Zusammenfassung mit dem genauen aktuellen Wert einstellt, aber der OP wollte auch etwas wie:

"Nachrichten bereinigen nach x Tage "* <- Zusammenfassung wo x ist der aktuelle Präferenzwert

Hier ist meine Antwort, um das zu erreichen

Gemäß der Dokumentation auf ListPreference.getSummary() :

Gibt die Zusammenfassung dieser ListPreference zurück. Wenn die Zusammenfassung eine String-Formatierungsmarkierung enthält (z.B. "%s" oder "%1$s"), dann wird der aktuelle Eintragswert an dessen Stelle ersetzt.

Ich habe dies jedoch auf mehreren Geräten ausprobiert und es scheint nicht zu funktionieren. Mit etwas Recherche habe ich eine gute Lösung gefunden in 本答 . Sie besteht einfach darin, dass jede Preference Sie verwenden und überschreiben getSummary() wie in der Android-Dokumentation beschrieben zu funktionieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X