addPreferencesFromResource - float, int, long, Set<String>

  • Wie sind diese Datentypen in der preference.xml (für die
    Standard-Edit-Funktion addPreferencesFromResource aus PreferenceFragment
    bzw. PreferenceActivity) zu definieren?


    Mit Boolean und String, inputType und defaultValue, EditText-,
    CheckBox-, Ringtone- und ListPreference bin ich vertraut. Aber auch
    numerische Informationen werden dabei lediglich in Strings gespeichert.


    Es gibt PUT- und GET-Methoden speziell für diese Typen, die aus der
    Anwendung heraus problemlos funktionieren. Nur sind diese so halt nicht
    kompatibel zum Editor und umgekehrt.

  • Infos darüber findest Du in den bekannten öffentlichen Quellen.


    Natürlich steht in einem XML alles als String drin, das ist auf Grund des Formats auch anders gar nicht möglich.
    Das XML stellt ja nur eine Repräsentation der jeweiligen Preference Objekte dar.


    Wenn Du etwas Anderes benötigst als Dir angeboten wird, dann erstelle Dir eigene Preference Objekte die das tun, was Du möchtest.
    Dann hast Du natürlich keine XML Datei.


    Andererseits ist Programmierung was Anderes als Elemente irgendwo hin ziehen und hoffen, dass das läuft.
    Da ist bei Abweichungen von Standardfällen Handarbeit von Nöten.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Es gibt neben

    SQL
    PreferenceManager.getDefaultSharedPreferences(context1).getString (key,"");

    bzw.

    SQL
    editor.putString(key,value);

    auch die entsprechenden Aufrufe für die speziellen Datentypen (boolean,float,int,long,Set&lt;String&gt;. All diese kann ich aus meiner Anwendung problemlos verwenden und mit z.B. getBoolean auch auf Begriffe zugreifen, die in der preference.xml definiert und über den daraus generierte Standard-Editor bearbeitet wurden. Ähnliches habe ich auch für die numerischen Typen erwartet. Diese werden vom Editor jedoch bislang als String abgelegt und auch so erwartet und sind damit (ohne Konvertierung) nicht kompatibel zu den Zugriffen aus der Anwendung. Somit gehe ich mal davon aus, dass alle preferences mit gleicher Logik an gleicher Stelle gespeichert sind.


    Beispiel: Ich möchte einen numerischen Wert in der preferences.xml als Integer (ggf. min=-7, max=23) definieren, über Setings bearbeiten und in der Anwendung direkt per getInt darauf zugreifen.


    Bei boolean funktioniert das ja bereits entsprechend.

  • Die Besonderheit bei den Preference XML ist, dass sie an spezielle Preference–Objekte gekoppelt sind, die von Preference erben.


    Die Konvertierung in boolean nimmt beispielsweise die TwoStatePreference Instanz (von der beispielsweise die CheckboxPreference und SwitchPreference erben) direkt vor. Dazu mappt sie vermutlich die Methode getBoolean() des Editors auf ihre 'checked' Property.


    Mir persönlich ist keine mitgelieferte Instanz der Preference bekannt, die Zahlwerte sowie Minimum– und Maximumwerte anbietet.
    Ebenso fällt mir persönlich kein adäquater Standardfall ein, der derartige Werte benötigen könnte.
    (Timeouts, Retries etc.pp. sind nach meinem Verständnis allerdings auch kein Standardfall)


    Insgesamt scheint mir die XML Implementierung bei Android ziemlich stiefmütterlich, doch immerhin ist sie in den repräsentierenden Objekten einigermaßen gut dokumentiert.


    Wie dem auch sei:

    • ich kenne keine von Android gelieferten Preference, die mit Zahlwerten agiert
    • dementsprechend wird Dir eine Nutzung des zur Preference gehörenden Editiors immer Strings zurückliefern
    • sofern die Preference kein internes Mapping für den Editor bereit stellt und beispielsweise auch boolean liefert
    • wobei ich nur zwei Preferences kenne, die das tun

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!