2011-10-09 7 views
7

Sto utilizzando SharedPreferences per archiviare i miei dati su tutti gli Activities all'interno della mia applicazione. Ottengo l'accesso a questo modo:Come forzare PreferenceActivity per gestire le mie SharedPreferences?

SharedPreferences mSharedPreferences = getSharedPreferences("MyPrefs", 0); 

Ho implementato PreferenceActivity così gli utenti possono modificare i valori attraverso di essa ma succede legge/scrive i dati non "MyPrefs", ma per:

PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 

Il che è un po 'inaspettato per me. È possibile forzare lo PreferenceActivity per gestire le mie preferenze "MyPrefs"? E qual è il punto di avere più preferenze all'interno di una singola applicazione? Grazie.

+1

Leggi questo: http://stackoverflow.com/questions/7045417/android-custom-sharedpreferences-implementation-to-persist-to-database – aromero

risposta

0

ottengo accesso ad essa come questo

va bene, a patto che non stavate pensando di usare PreferenceActivity.

Ho implementato PreferenceActivity così gli utenti possono modificare i valori attraverso di essa

Ops.

Inoltre, eliminare lo getApplicationContext() lì, a meno che non si abbia un motivo specifico per utilizzare lo Application anziché l'attività/servizio/altro. Utilizzare l'oggetto Application solo quando è necessario e si sa perché è necessario.

È possibile forzare PreferenceActivity per gestire le mie preferenze "MyPrefs"?

Non facilmente. A meno che tu non abbia una ragione specifica per inventare il tuo file SharedPreferences, userei quello predefinito.

E qual è il punto di avere più preferenze all'interno di una singola applicazione?

si potrebbe avere una libreria riutilizzabile o un componente desidera memorizzare roba in SharedPreferences, e che potrebbero avere un proprio file in modo da non rovinare eventuali preferenze dall'applicazione di hosting. Detto questo, non sono in genere necessari più file di preferenze.

+11

'' di PreferenceActivity' getPreferenceManager() .setSharedPreferencesName() 'fa il trucco – xverges

4

Suggerirei di utilizzare PreferenceManager.getDefaultSharedPreferences (context) ovunque, che è lo stesso di quello utilizzato dall'attività delle preferenze. Ma se hai bisogno di mantenere il tuo setup attuale, allora una soluzione hacky (ma l'unica che conosco) è quella di sovrascrivere getSharedPreferences per restituire quello che vuoi.

@Override 
public SharedPreferences getSharedPreferences(String name, int mode) { 
    return super.getSharedPreferences("MyPrefs", mode); 
} 
14

È possibile e semplice. Questo ha funzionato per me

public class SettingsActivity extends PreferenceActivity { 
    @SuppressWarnings("deprecation") 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     getPreferenceManager().setSharedPreferencesName("MyPrefs"); 
     //getPreferenceManager().setSharedPreferencesMode(MODE_WORLD_WRITEABLE); 
    addPreferencesFromResource(R.xml.preferences); 
    } 
} 
+0

Ha funzionato anche per me ... grazie! – aap

+0

Questa è la risposta corretta.Questa tecnica funziona anche se stai usando un 'PreferenceFragment' –

+0

Questa dovrebbe essere la risposta accettata. – Jay

Problemi correlati