l'accesso a una classe da un'altra attività
-
30-09-2019 - |
Domanda
Hanno seguente configurazione:
class MainActivity - estende l'attività
MyLayout classe - estende Visualizza
Preferenze di classe - estende PreferenceActivity e implementa OnSharedPreferenceChangeListener
MainActivity crea una classe MyLayout e lo imposta come la sua contentView. Una volta che l'utente preme sul menu, classe Preferenze inizia dove l'utente può modificare alcune impostazioni.
Quello che voglio è che, una volta che l'utente modifica un'impostazione, il metodo OnsharedPreferenceChanged overload nella classe Prefs sarà chiamato e da lì vorrei richiamare i metodi pubblici sulla classe MyLayout che è stato creato nel MainActivity.
Come posso fare questo?
Soluzione
Non sovraccaricare metodo onSharedPreferenceChanged in preferenceactivity. Ottenere un'istanza della preferenza condivisa nella vostra MainActivity, e poi registrare un onsharedpreferencechangedlistener su quella interna del vostro mainactivity
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
pref.registerOnSharedPreferenceChangeListener(prefListener);
E allora si può creare una nuova preferenza ascoltatore
OnSharedPreferenceChangeListener prefListener = new OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(
SharedPreferences sharedPreferences, String key) {
// Do stuff
}
};
Si dovrebbe anche annullare la registrazione l'ascoltatore in onPause () a meno che non avete bisogno di persistere, altrimenti annullare la registrazione su onStop ()
Altri suggerimenti
Prova rendendo MainActivity
implementare OnSharedPreferenceChangeListener
e registrarlo sul metodo onCreate()
come diceva Falmarri.