Frage

Ich benutze eine Vorliebenschaft, um einige Einstellungen für meine Anwendung anzuzeigen. Ich blaue die Einstellungen über eine XML -Datei auf, damit meine Oncreate (und vollständige Klassenmethoden) folgendermaßen aussehen:

public class FooActivity extends PreferenceActivity {
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        addPreferencesFromResource(R.xml.preference);
    }
}

Der Javadoc von Befertigung Präferenzfragment besagt, dass

Diese Einstellungen speichern automatisch in SharedPreferences, wenn der Benutzer mit ihm interagiert. Um eine Instanz von SharedPreferenzen abzurufen, die die Präferenzhierarchie in dieser Aktivität verwenden wird, rufen Sie GetDefaultSharedPreferences (android.content.context) mit einem Kontext im selben Paket wie diese Aktivität auf.

Aber wie bekomme ich den Namen der SharedPreference in einer anderen Aktivität? Ich kann nur anrufen

getSharedPreferences(name, mode)

In der anderen Aktivität, aber ich brauche den Namen der SharedPreferenz, die von der Bevorzugung verwendet wurde. Wie heißt oder wie kann ich ihn abrufen?

War es hilfreich?

Lösung

import android.preference.PreferenceManager;
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
// then you use
prefs.getBoolean("keystring", true);

Aktualisieren

Entsprechend Gemeinsame Einstellungen | Android Developer Tutorial (Teil 13) von Sai Geetha MN,

Viele Anwendungen bieten möglicherweise eine Möglichkeit, Benutzerpräferenzen für die Einstellungen einer bestimmten Anwendung oder einer Aktivität zu erfassen. Um dies zu unterstützen, bietet Android einen einfachen APIs.

Einstellungen sind in der Regel Nennwertpaare. Sie können in einer Anwendung als „gemeinsame Präferenzen“ über verschiedene Aktivitäten hinweg gespeichert werden (beachten Sie derzeit, dass sie nicht über Prozesse teilgenommen werden kann). Oder es kann etwas sein, das für eine Aktivität spezifisch gespeichert werden muss.

  1. Gemeinsame Präferenzen: Die gemeinsam genutzten Präferenzen können von allen Komponenten (Aktivitäten, Dienste usw.) der Anwendungen verwendet werden.

  2. AKTIVITÄTEN behandelte Vorlieben: Diese Präferenzen können nur innerhalb der bestimmten Aktivität verwendet werden und können nicht von anderen Komponenten der Anwendung verwendet werden.

Gemeinsame Einstellungen:

Die gemeinsamen Vorlieben werden mit Hilfe von verwaltet getSharedPreferences Methode der Context Klasse. Die Einstellungen werden in einer Standarddatei gespeichert (1) oder Sie können einen Dateinamen angeben (2) verwendet werden, um sich auf die Vorlieben zu beziehen.

(1) Der empfohlene Weg ist im Standardmodus zu verwenden, ohne den Dateinamen anzugeben

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);

(2) Hier ist, wie Sie die Instanz erhalten, wenn Sie den Dateinamen angeben

public static final String PREF_FILE_NAME = "PrefFile";
SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);

MODE_PRIVATE ist der Betriebsmodus für die Einstellungen. Es handelt sich um den Standardmodus und bedeutet, dass auf die erstellte Datei nur von der aufrufenden Anwendung zugegriffen wird. Die anderen beiden unterstützten Modi sind MODE_WORLD_READABLE und MODE_WORLD_WRITEABLE. Im MODE_WORLD_READABLE Eine andere Anwendung kann die erstellte Datei lesen, sie jedoch nicht ändern. Im Falle von MODE_WORLD_WRITEABLE Andere Anwendungen haben auch Schreibberechtigungen für die erstellte Datei.

Sobald Sie die Einstellungsinstanz haben, können Sie hier können, wie Sie können Rufen Sie die gespeicherten Werte ab aus den Einstellungen:

int storedPreference = preferences.getInt("storedInt", 0);

Zu Werte speichern in der Präferenzdatei SharedPreference.Editor Objekt muss verwendet werden. Editor ist eine verschachtelte Schnittstelle in der SharedPreference Klasse.

SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();

Der Herausgeber unterstützt auch Methoden wie remove() und clear() So löschen Sie die Präferenzwerte aus der Datei.

Aktivitätseinstellungen:

Die gemeinsam genutzten Einstellungen können von anderen Anwendungskomponenten verwendet werden. Wenn Sie jedoch nicht die Vorlieben mit anderen Komponenten teilen müssen und über private Vorlieben von Aktivitäten verfügen möchten, können Sie dies mit Hilfe von tun getPreferences() Methode der Aktivität. Das getPreference Methode verwendet die getSharedPreferences() Methode mit dem Namen der Aktivitätsklasse für den Namen der Präferenzdatei.

Im Folgenden finden Sie den Code, um Einstellungen zu erhalten

SharedPreferences preferences = getPreferences(MODE_PRIVATE);
int storedPreference = preferences.getInt("storedInt", 0);

Der Code zum Speichern von Werten ist ebenfalls der gleiche wie bei gemeinsamen Präferenzen.

SharedPreferences preferences = getPreference(MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();

Sie können auch andere Methoden wie das Speichern des Aktivitätszustands in der Datenbank verwenden. Hinweis Android enthält auch ein Paket namens namens android.preference. Das Paket definiert Klassen zur Implementierung der Benutzeroberfläche der Anwendungseinstellungen.

Um einige weitere Beispiele zu sehen, überprüfen Sie die Androids Datenspeicher Post auf der Entwicklerseite.

Andere Tipps

Wenn Sie keinen Zugriff haben getDefaultSharedPreferenes(), Sie können verwenden getSharedPreferences(name, mode) Stattdessen müssen Sie nur den richtigen Namen geben.

Android erstellt diesen Namen (möglicherweise basierend auf dem Paketnamen Ihres Projekts?). Sie können es bekommen, indem Sie den folgenden Code in a einlegen SettingsActivity onCreate(), und sehen was preferencesName ist.

String preferencesName = this.getPreferenceManager().getSharedPreferencesName();

Die Zeichenfolge sollte so etwas wie sein com.example.projectname_preferences. Hartes Code, den irgendwo in Ihrem Projekt und weitergeben getSharedPreferences() Und du solltest gut gehen.

Erkläre diese Methoden zuerst ..

public static void putPref(String key, String value, Context context) {
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putString(key, value);
    editor.commit();
}

public static String getPref(String key, Context context) {
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
    return preferences.getString(key, null);
}

Rufen Sie dies dann an, wenn Sie einen Pref setzen möchten:

putPref("myKey", "mystring", getApplicationContext());

Rufen Sie dies an, wenn Sie einen Vorreiter erhalten möchten:

getPref("myKey", getApplicationContext());

Oder Sie können dieses Objekt verwenden https://github.com/kcochibili/tinydb-undroid-shared-preferences-turbo was alles noch weiter vereinfacht

Beispiel:

TinyDB tinydb = new TinyDB(context);

tinydb.putInt("clickCount", 2);
tinydb.putFloat("xPoint", 3.6f);
tinydb.putLong("userCount", 39832L);

tinydb.putString("userName", "john");
tinydb.putBoolean("isUserMale", true); 

tinydb.putList("MyUsers", mUsersArray);
tinydb.putImagePNG("DropBox/WorkImages", "MeAtlunch.png", lunchBitmap);

Es ist wirklich nervig, überall einen Kontext überall zu bestehen. Der Code wird zu ausführlich und unüberschaubar. Ich mache das stattdessen in jedem Projekt ...

public class global {
    public static Activity globalContext = null;

und stellen Sie es in die Hauptaktivität ein, die erstellen

@Override
public void onCreate(Bundle savedInstanceState) {
    Thread.setDefaultUncaughtExceptionHandler(new CustomExceptionHandler(
            global.sdcardPath,
            ""));
    super.onCreate(savedInstanceState);

    //Start 
    //Debug.startMethodTracing("appname.Trace1");

    global.globalContext = this;

Auch alle Präferenzschlüssel sollten sprachunabhängig sein. Ich bin schockiert, dass niemand das erwähnt hat.

getText(R.string.yourPrefKeyName).toString()

Nennen Sie es jetzt einfach so in einer Codezeile

global.globalContext.getSharedPreferences(global.APPNAME_PREF, global.MODE_PRIVATE).getBoolean("isMetric", true);

Wenn Sie ein Kontrollkästchen haben und in jeder Java-Datei einen Wert haben, dh true / false.

Verwenden--

Context mContext;
boolean checkFlag;

checkFlag=PreferenceManager.getDefaultSharedPreferences(mContext).getBoolean(KEY,DEFAULT_VALUE);`

Aktualisiert 2019

Sie können einfach verwenden PowerPreference Bibliothek

https://github.com/aliesaassadi/android-power-preference

Erhalten Sie gemeinsame Präferenzinstanzen

Um die Standardinstanz zu erhalten, müssen Sie nur anrufen

PowerPreference.getDefaultFile()

Oder wenn Sie eine bestimmte Präferenzdatei wünschen

PowerPreference.getFileByName(fileName)

Daten schreiben:

PowerPreference.getDefaultFile().put(key,value)

Daten erhalten

PowerPreference.getDefaultFile().getString(key,value)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top