Sono stato 3 giorni con questo problema e mi sta uccidendo. Il programma crea le preferenze la prima volta, ma dopo non le cambia mai.Le preferenze condivise vengono salvate solo la prima volta
Questa è la schermata delle preferenze in cui viene chiamato 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);
}
Nelle preferenze ho un ListPreference e un Preference che chiama un'attività per memorizzare le email.
<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>
Tutto fino a qui. I problemi sono in attività denominata ...
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();
}
}
}
Il punto è che memorizza sempre la prima volta bene, ma se io quando aggiungo un'altra email le preferenze doesnt't cambiamento. Sembra che cambino perché se li stampo mostrano tutte le email che aggiungo ma il file delle preferenze non cambia (controllandolo in Esplora file). E se riavvio o chiudo e apro di nuovo, le preferenze sono solo con la prima email che aggiungo. La cosa è se io ritorno a e cambio la preferenza di ListPreference, quindi memorizza tutte le modifiche anche le e-mail che ho aggiunto.
Spero di essere stato chiaro, ha un sacco di codice perché volevo essere molto esplicito. Grazie per l'aiuto.
Ho provato a cambiare prefs = PreferenceManager.getDefaultSharedPreferences (getApplicationContext()); linea per prefShared = getApplicationContext(). getSharedPreferences ("com.example.daemon3_preferences", MODE_PRIVATE); con lo stesso risultato. – Alberto