2017-10-04 6 views
-3

Ich habe den Wert für gemeinsame Voreinstellungen geändert, aber er gibt immer noch den alten Wert zurück. Was vermisse ich?SharedPreferences geben denselben Wert auch nach der Bearbeitung zurück

Dieser Code wird ausgeführt, wenn der Benutzer auf das Element in RecyclerView klickt. Also beim ersten Klick bekomme ich die Nachricht " this true" wie erwartet. Aber auf den zweiten Klick bekomme ich auch " this true", aber erwarte "this false".

SharedPreferences prefs = context.getSharedPreferences(MY_PREF, Context.MODE_PRIVATE); 
    boolean value = prefs.getBoolean(KEY_PREF, true); 
    if (value) { 
     Log.v(LOG_TAG, "this true"); 
     Log.v(LOG_TAG, "editing value.."); 
     SharedPreferences.Editor prefs = context.getSharedPreferences(MY_PREF, MODE_PRIVATE).edit(); 
     prefs.putBoolean(KEY_PREF, new_value); 
     prefs.apply(); 
    } else { 
     Log.v(LOG_TAG, "this false"); 
    } 
+0

Was ist der Wert von 'new_value'? Vielleicht sollten Sie stattdessen '! Value' speichern. Dies schaltet den Wert um. –

Antwort

0

Der Anruf prefs.apply ist asynchron. Möglicherweise sehen Sie die sofortige Änderung nicht. Stattdessen könnten Sie prefs.commit verwenden, die synchron ist.

3

Alles, was Sie speichern, ist true, immer, also gibt es keine Möglichkeit this false zu zeigen, wie es nie passieren wird. Tatsächlich wird Ihr Code nicht kompiliert, da new_value niemals als nicht zugewiesen deklariert wird.

PS: Es hat keinen Sinn, zum zweiten Mal getSharedPreferences() aufzurufen. Sie haben es bereits in prefs vor Eingabe Ihrer if() Block.

+0

ja, tut mir leid. Eigentlich setze ich NewValue –

+0

Update die Frage –

+0

Dies ist nur ein Stück Code. Ich habe alles erklärt und zugewiesen –

Verwandte Themen