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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top