Autore Topic: OnSharedPreferenceChangeListener funziona solo la prima volta che viene chiamato  (Letto 311 volte)

Offline pindol

  • Nuovo arrivato
  • *
  • Post: 48
  • Respect: +2
    • Mostra profilo
Ho un problema con l'aggiornamento del testo di un bottone in base allo stato di una sharedpreference. Ho creato un listener e lo ho associato ad una sharedpreferences, ma il listener funziona solo la prima volta che cambio il valore della preference. Di seguito il codice:
Codice (Java): [Seleziona]
OnSharedPreferenceChangeListener listener = new SharedPreferences.OnSharedPreferenceChangeListener() {
                       
                        @Override
                        public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
                                if(key.equals("Button_1_text"))
                                        button1.setText(sharedPreferences.getString(key, "Bottone 1"));
                                else if(key.equals("Button_1_state"))
                                        setButton1();
                        }
        };
       
                prefs.registerOnSharedPreferenceChangeListener(listener);

la funzione setbutton1 è la seguente:
Codice (Java): [Seleziona]
public void setButton1() {
        if(prefs.getBoolean("Button_1_state", true)){
                button1.setText(prefs.getString("Button_1_text", "Bottone 1"));
                button1.setVisibility(View.VISIBLE);
        }
        else
                button1.setVisibility(View.GONE);
    }

Ripeto, la prima volta che eseguo la modifica della preferences funziona tutto correttamente, quando cambio nuovamente il valore non funziona più. Come posso fare?
Grazie, Mattia

Offline pindol

  • Nuovo arrivato
  • *
  • Post: 48
  • Respect: +2
    • Mostra profilo
0
Ho risolto il problema. Ho tolto il listener dalla classe che estende la Activity e ho modificato la classe che estende preferenceactivity nel seguente modo:
Codice (Java): [Seleziona]
public class SetPrefs extends PreferenceActivity implements OnSharedPreferenceChangeListener {
    /** Called when the activity is first created. */
        @Override
                public void onCreate(Bundle savedInstanceState) {
                        super.onCreate(savedInstanceState);
                        addPreferencesFromResource(R.xml.preferences);
                }

        @Override
        public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
                NOMECLASSEACTIVITY.button1.setText(sharedPreferences.getString(key, "Bottone 1"));
        }
       
        @Override
    protected void onResume(){
        super.onResume();      
        getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
    }

    @Override
    protected void onPause() {
        super.onPause();            
        getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);    
    }
}