Autore Topic: Modifiche SharedPreferences  (Letto 718 volte)

Offline ginoz

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    windows
Modifiche SharedPreferences
« il: 22 Marzo 2011, 17:30:23 CET »
0
Nelle SharedPreferences ho una checkbox per decidere se un servizio deve andare o no e quindi in base ai cambiamento di quel valore lo devo far partire o stoppare.

Ho trovato 2 soluzioni, chiedo a voi la migliore.


Soluzione 1: Uso OnSharedPreferenceChangeListener nell'activity principale, in questo caso però mi becca l'evento ad ogni cambiamento del flag della checkbox.

Codice (Java): [Seleziona]
public class Main extends ListActivity {
  private final OnSharedPreferenceChangeListener mSharedPreferenceChangeListener =
        new OnSharedPreferenceChangeListener() {
    public void onSharedPreferenceChanged(
            SharedPreferences sharedPreferences, String key) {
        //CONTROLLO SE TRUE O FALSE E AVVIO O FERMO IL SERVIZIO
    }
    };

    @Override
     protected void onResume() {
                //TODO Auto-generated method stub      
          SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
          sp = PreferenceManager.getDefaultSharedPreferences(this);
          sp.registerOnSharedPreferenceChangeListener(
                mSharedPreferenceChangeListener);
          super.onResume();
        }

    @Override
     public void onPause(){
          SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
          sp = PreferenceManager.getDefaultSharedPreferences(this);
          sp.unregisterOnSharedPreferenceChangeListener(
                mSharedPreferenceChangeListener);
          super.onPause();
     }
}


Soluzione 2: Faccio tutto all'uscita della PreferenceActivity

Codice (Java): [Seleziona]
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;

public class Preference extends PreferenceActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preference);
    }

    @Override
    protected void onPause() {
                // TODO Auto-generated method stub
                super.onPause();
               
        SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
        if (sp.getBoolean("mainUpdates", false)) {
                // START SERVIZO
        }
        else {
                // STOP SERVIZO
        }
    }

A me piace più la soluzione 2 perché il servizio viene stoppato/avviato all'uscita dall'Activity, certo sarebbe da ottimizzare leggendo il valore all'entrata e poi all'uscita e fare qualcosa solo se cambia.
« Ultima modifica: 22 Marzo 2011, 23:07:38 CET da ginoz »

Offline Auron

  • Utente junior
  • **
  • Post: 104
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Motorola Milestone Android 2.2.1
  • Sistema operativo:
    Windows
Re:Modifiche SharedPreferences
« Risposta #1 il: 09 Gennaio 2012, 23:19:29 CET »
0
Ok, ma se avessi invece una classe che estende ExpandableListActivity, non posso chiamare l'override di onPause e onResume. Come faccio quindi?
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;-)