He estado 3 días con este problema y me está matando. El programa crea las preferencias la primera vez pero después de eso nunca las cambia.Preferencias compartidas solo guardadas la primera vez
Esta es la pantalla de preferencias donde se llama al xml.
public class PreferencesScreen extends PreferenceFragment{
private final String TAG = "PreferencesScreen";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "OnCreate");
addPreferencesFromResource(R.xml.prefs);
}
En las preferencias tengo una ListPreference y una preferencia que llama a una actividad para almacenar correos electrónicos.
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<PreferenceCategory android:title="Information Collected">
<ListPreference
android:key="loggins"
android:title="Logs Stored"
android:summary="Choose the top kind of logs do you want to store."
android:dialogTitle="Choose Logs"
android:entries="@array/logs"
android:entryValues="@array/logsValues"/>
</PreferenceCategory>
<PreferenceCategory android:title="Email Configurations">
<Preference
android:key="pushing"
android:title="The Email Activity"
android:summary="Just push">
<intent android:action = "ADDING_EMAIL"/>
</Preference>
</PreferenceCategory>
</PreferenceScreen>
Todo hasta aquí. Los problemas están en la actividad llamada ...
public class AddingEmail extends ListActivity implements OnClickListener{
private Set<String> emails;
private EditText emailAdd;
SharedPreferences.Editor editor;
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.addingemail);
Button add = (Button) findViewById(R.id.add);
emailAdd = (EditText) findViewById(R.id.email);
prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
editor = prefs.edit();
prefList = toArrayList(prefs.getStringSet("emailWrongs", null));
add.setOnClickListener(this);
}
public void onClick(View v) {
Set<String> list = prefs.getStringSet("emailWrongs", null);
String newEmail = emailAdd.getText().toString();
if (list==null){ //first time the preferences are called.
emails = new TreeSet<String>();
editor.putStringSet("emailWrongs", emails);
editor.apply();
}
if (newEmail != ""){
emails=prefs.getStringSet("emailWrongs", null);
emails.add(newEmail);
editor.putStringSet("emailWrongs", emails);
editor.apply();
}
}
}
El punto es que siempre se almacena bien la primera vez, pero si cuando agrego otro email las preferencias doesnt't cambio. Parece que cambian porque si los imprimo muestran todos los correos electrónicos que agrego, pero el archivo de preferencias no cambia (verificándolo en el Explorador de archivos). Y si reinicio o cierro y abro de nuevo, las preferencias son solo con el primer correo electrónico que agregue. El asunto es si vuelvo y cambio la preferencia de ListPreference, entonces almacena todos los cambios incluso los correos electrónicos que agregué.
Espero que fuera claro, tiene un montón de código porque quería ser muy explícito. Gracias por la ayuda.
I intentado cambiar prefs = PreferenceManager.getDefaultSharedPreferences (getApplicationContext()); línea para prefShared = getApplicationContext(). getSharedPreferences ("com.example.daemon3_preferences", MODE_PRIVATE); con el mismo resultado. – Alberto