2012-09-21 14 views
5

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.

+0

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

Odpowiedz

14

Po ponad tygodniu szukania pomyłki znalazłem go. Myślę, że może to być pomocne dla wielu osób, które miały ten sam problem.

Problem polegał na tym, że kiedy wywołuję preferencje, aby uzyskać zestaw ciągów, odwołuję się tylko do listy i nie wykonuję jej kopii. Tak więc muszę utworzyć nową listę i dodać wszystkie wcześniej zapisane elementy, a także dodać nowy element, a następnie za pomocą edytora zmienić preferencje z nową listą. Kod jest tak:

Set<String> list = prefs.getStringSet("emailWrongs", null); 
Set<String> newList = new TreeSet<String>(); 
String newEmail = emailAdd.getText().toString();   
if (newEmail != ""){ 
    if (list != null){ 
     for(String each: list){ 
      newList.add(each); 
     } 
    } 
    newList.add(newEmail); 
    editor.putStringSet("emailWrongs", newList);  
    editor.apply();  
} 
+1

Co zrobiłem było coś w stylu 'Set list = new HashSet (prefs.getStringSet (" emailWrongs ", null);' a następnie po prostu wprowadź zmiany w 'list' i' putStringSet (... 'gdy jesteś – RTF

+0

Jesteś ratownikiem – hellowill89

+0

Zmarnowany dwa dni na ten numer, dziękuję –

Powiązane problemy