Mam 3 dni z tym problemem i mnie zabija. Program tworzy preferencje za pierwszym razem, ale potem nigdy ich nie zmienia.Współdzielone preferencje zostały zapisane po raz pierwszy
To jest ekran PreferencesScreen, w którym jest wywoływany 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);
}
W preferencjach mam ListPreference i Preferencję, która wywołuje działanie do przechowywania wiadomości e-mail.
<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>
Wszystko do tej pory. Problemy są w działalności o nazwie ...
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();
}
}
}
Chodzi o to, że po raz pierwszy zawsze przechowuje dobrze, ale jeśli po dodaniu kolejnego maila preferencje doesnt't zmiany. Wygląda na to, że się zmieniają, ponieważ jeśli je wydrukuję, pokażą wszystkie dodane przeze mnie wiadomości, ale plik preferencji się nie zmieni (Sprawdzanie w Eksploratorze plików). A jeśli ponownie uruchomię lub zamknę i otworzę ponownie, preferencje dotyczą tylko pierwszego e-maila, który dodaję. Chodzi o to, że wracając do preferencji ListPreferencji, a następnie przechowuje wszystkie zmiany nawet w dodanych e-mailach.
Mam nadzieję, że było jasne, ma dużo kodu, ponieważ chciałem być bardzo bezpośredni. Dziękuję za pomoc.
Próbowałem zmieniając Prefs = PreferenceManager.getDefaultSharedPreferences (getApplicationContext()); linia dla prefShared = getApplicationContext(). getSharedPreferences ("com.example.daemon3_preferences", MODE_PRIVATE); z tym samym wynikiem. – Alberto